重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
python的类里用@staticmethod的是静态方法,@classmethod的是类方法,如下
成都创新互联服务项目包括岭东网站建设、岭东网站制作、岭东网页制作以及岭东网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,岭东网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到岭东省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
class Person(object):
person_list = []
def __init__(self, name, age):
self.name = name
self.age = age
self.person_list.append(self)
@classmethod
def one_year_later(cls):
for p in cls.person_list:
p.age += 1
@staticmethod
def born_one_boby(name):
return Person(name, 0)
def __repr__(self):
return 'Person name:%s, age:%s' % (self.name, self.age)
if __name__ == '__main__':
petter = Person('Petter',23)
merry = Person('Merry',21)
print(petter) # Person name:Petter, age:23
print(merry) # Person name:Merry, age:21
Person.one_year_later()
print(petter) # Person name:Petter, age:24
print(merry) # Person name:Merry, age:22
baby = merry.born_one_boby('Tom')
print(Person.person_list) # [Person name:Petter, age:24, Person name:Merry, age:22, Person name:Tom, age:0]
Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即可调用,完全不需要类,那么你可能会问,那要类还有什么毛用? 类就是用来面向对象编程啦,类可以有自己的属性,类可以创建很多实例,每个实例可以有不同的属性,这也就保存了很多私有的数据,总之都有存在的必要.
再来看上面这张图,在类里面定义的函数就是方法,类方法需要@ classmethod 修饰并且有个隐藏参数 cls,实例方法必须有个参数 self, 静态方法必须有 @staticmethod修饰,类和实例都可以访问静态方法,实例可以访问实例方法也可以访问类方法,类可以访问类方法也可以访问实例方法,访问实例方法必须要带参数 self, 可以理解为类其实也是一个实例,类访问实例方法不带参数会报错的.类本身可以访问函数,实例却不行.
class A(object):
def fun_a(self):#实例方法
pass
@staticmethod
def fun_b():#静态方法
pass
@classmethod
def fun_c(cls):#类方法
pass
虽然静态方法和类方法调用方式都一样,都可以通过【类.方法名】来使用,但是类方法中有默认属性cls,指向自身的类,所以一般如果是单一的工具函数定义成静态方法,如果还需要调用类中其他的静态方法,或者类方法的函数定义成类方法。望采纳。