类方法和静态方法
类方法
使用装饰器@classmethod来定义类方法。原理上来说,类方法是将类本身作为对象进行操作的方法。类方法内部可以直接访问类属性、类方法、实例方法,但是无法访问实例属性。例如:
代码语言:javascript复制class person:
flag = "类属性"
def __init__(self, name):
self.name = name
@classmethod
def class_m(cls):
print(cls.flag) # 访问类属性
cls.self_m(cls) # 调用实例方法
cls.class_m2() # 访问类方法
# self.name # 错误,无法访问实例属性
def self_m(self):
print("实例方法")
@classmethod
def class_m2(cls):
print("第二个类方法")
p = person("赵四")
p.class_m()
静态方法
静态方式使用@staticmethod来定义。静态方法不能访问实例属性、类属性、实例方法、类方法。可以理解为,静态方法是个独立的、单纯的函数,它仅仅只是被托管在某个类的名称空间中,便于使用和维护而已。例如:
代码语言:javascript复制class Person():
name = "Nicholas ZhaoSi"
@staticmethod
def static(x):
print(x)
# print(name) # 错误,静态方法不能访问类属性,类方法,实例属性,实例方法
Person().static(123)