一.类的静态属性
即是将类的函数属性,封装成类似数据属性。比如:类方法函数的返回值获取。通过:@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