【Python笔记】向量:@classmethod与 @staticmethod。零基础

类成员

比较@classmethod与 @staticmethod
共同点:

  • 两个都是装饰器,装饰的成员函数可以通过类名.方法名(…)来调用

区别:

  • 最显著的特点是classmethod需要传递一个参数cls,而staticmethod不需要。因此可以访问、修改类的属性,类的方法,实例化对象等,避免硬编码;而staticmethod不行,
  • classmethod可以判断出自己是通过基类被调用,还是通过某个子类被调用
    实例成员
实例成员
class A:
    def __init__(self, 参数):
        self.实例变量 = 参数

    def 实例方法名称(self):
        print(self.实例变量)


a01 = A(10)
print(a01.实例变量)
a01.实例方法名称()  # 自动传递对象地址

@classmethod

类成员
class B:
    #无论创建多少对象,类变量只有一份,被所有对象所共享。
    类变量 = 10
	#类方法:操作类变量
    @classmethod
    def 类方法名称(cls):
        print(cls.实例变量)

print(B.类变量)
B.类方法名称()  #自动传递类名

@staticmethod

class C:
    # 3.静态方法
    @staticmethod
    def fun01():
        print("方法执行啦")


C.fun01()

具体实例:

类方法

1.语法
(1)定义:
    @classmethod
    def 方法名称(cls,参数列表):
      方法体
(2)调用:类名.方法名(参数列表)
2.说明
– 至少有一个形参,第一个形参用于绑定类,一般命名为’cls’
– 使用@classmethod修饰的目的是调用类方法时可以隐式传递类。
– 类方法中不能访问实例成员,实例方法中可以访问类成员。
3.作用:操作类变量。

class  ICBC:
    #类变量
    moneys = 9999
    #类方法  #相当于大家共享的“饮水机”
    @classmethod   #类方法使用classmethod修饰器修饰
    def print_total_moneys

你可能感兴趣的:(Python笔记,python)