一.类的静态属性
即是将类的函数属性,封装成类似数据属性。比如:类方法函数的返回值获取。通过:@proporty
class Who(object): what = 'what' # brother = 'jack' def __init__(self,name,age,gender): self.name = name self.age = age self.gender =gender def information(self): print(self.name,self.age,self.gender) return self.name ##将函数增加一个返回值 p1 = Who('张三',18,'男') p1.information() ##实例化调用类的函数,有(),因为类的属性字典中存储的是函数的内存地址,调用需要加()
print(Who.information) ##<function Who.information at 0x000002985CFFAA60>
运行结果:张三 18 男
()+无返回值 :静态属性可以省去(),也可以获得返回值。
##静态属性 class Who(object): what = 'what' # brother = 'jack' def __init__(self,name,age,gender): self.name = name self.age = age self.gender =gender @property def information(self): print(self.name,self.age,self.gender) return self.name p1 = Who('张三',18,'男') a = p1.information ##作为静态属性调用,而非函数调用【无()】 print(a) 张三 18 男 张三 ##返回值
print(Who.information) ##<property object at 0x0000018E723967C8>
二.类的方法
类方法由@classmethod装饰,可以访问类属性。
2.1通过实例化调用类属性:在实例化数据属性字典中,没有找到what变量,就向上一级寻找。所以,通过实例化能够,轻松的调用类属性what
class Who(object): what = 'what' # brother = 'jack' def __init__(self,name,age,gender): self.name = name self.age = age self.gender =gender def information(self): print(self.name,self.age,self.gender) return self.name def leishuxing(self): print(self.what) p1 = Who('张三',18,'男') a = p1.leishuxing() ##what
2.2不通过实例化,怎么调用类属性呢?直接通过类调用,也可以调用到类属性。【类外部调用类属性】
print(Who.what) ##what
2.3不通过实例化,在类的内部调用类的属性又该如何操作呢?
class Who(object): what = 'what' # brother = 'jack' def __init__(self,name,age,gender): self.name = name self.age = age self.gender =gender def information(self): print(self.name,self.age,self.gender) return self.name def leishuxing(self): print(self.what) Who.leishuxing()
TypeError: leishuxing() missing 1 required positional argument: 'self'
错误信息显示:不通过实例化,类内部调用类属性,缺少位置参数self。
通过 @classmethod类方法,在类的内部调用类属性
class Who(object): what = 'what' # brother = 'jack' def __init__(self,name,age,gender): self.name = name self.age = age self.gender =gender def information(self): print(self.name,self.age,self.gender) return self.name @classmethod def leishuxing(self): print(self.what) Who.leishuxing() ##what
三.静态方法
静态方法只是名义上的归属类管理,不能使用类变量,是类的工具包(相当于普通函数)。也就是说,类中的这个方法函数,与类的数据属性无关,仅仅是一个放在类里面的普通函数
class Who(object): what = 'what' # brother = 'jack' def __init__(self,name,age,gender): self.name = name self.age = age self.gender =gender def information(self): print(self.name,self.age,self.gender) return self.name @classmethod def leishuxing(self): print(self.what) @staticmethod def state_fun(x): print('this is a family of %s'%x) Who.state_fun('three')
this is a family of three
来源:https://www.cnblogs.com/liuhuacai/p/12596220.html