面向对象之self classmethod staticmethod

class Foo:
    """静态字段
       调用方式:类名.静态字段
       在当前类的任意位置可以被调用,
       但是注意了
            如果是静态的方法/类方法,只能是类名.静态字段
            如果是普通方法,可以用self.静态字段, 或者类名.静态字段
    """
    name1 = "gendan"
    age = 100000
    def __init__(self, name):
        """构造方法"""
        print('这是一个构造方法,在对象创建时就自动加载进内存,而且只有一次')
        self.name = name  #声明一个普通字段,调用方式只能是对象.属性来访问,每创建一个对象就会在内存中开一个空间
        self.age = "10"
        print(Foo.age)

    def gen_func(self):
        """ 定义普通方法,至少有一个self参数 """
        print(self.name,"普通方法ord_func")
        print('普通方法')
        # self.age = 999
        # print("----",self.age)
    @classmethod  #--->声明紧接它以def开头定义的方法,并且此方法里面后面至少第一个参数是cls
    def class_func(cls):   #调用方式是类名.方法()   Foo.class_func()
        """ 定义类方法,至少有一个cls参数 """
        print ( '类方法')
        # Foo.age="0101 类方式更改静态字段"
        print(Foo.age)
        #类方法里不允许用self方式来访问(不难想象self是一个句柄,只针对对象
    @staticmethod   #--->声明紧接它以def开头定义的方法叫静态方法
    def static_func():
        """ 定义静态方法 ,无默认参数"""
        print('静态方法')
        #静态方法里同样不允许self方式访问(理由同上)
#创建类对象
f =Foo("")
f.name = "diger"
Foo.age = 99  #允许类方式修改静态字段
f.gen_func()
Foo.class_func() #0101 类方式更改静态字段
print(f.name,"直接外部来调用") #diger 直接外部来调用
原文地址:https://www.cnblogs.com/hongyongshang/p/6713692.html