类定义中的静态方法和类方法
静态方法:
- 定义时需加修饰器@staticmethod,入口参数中无self;
- 可以同过实例和类两种形式调用,多用类调用;
- 可以看作是类内部的“外界普通函数”,不继承类内任何信息,用法上与外界函数完全一样;
- 不能直接访问类中的方法或变量;(不继承任何信息)
- 但是可以调用实例化后的方法和属性,或者加了类前缀的;但此时已经不是“类内部调用”了,已经和外界函数调用类的信息一样了;
class Myclass(object): # 部分来自python进阶之路的博客
# 定义一个静态变量
name = 'Bill'
def __init__(self): # init中的变量只有实例化以后才会创建,直接调用类是不会有的
print('Myclass已被实例化')
# 定义实例变量,静态方法和类方法不能访问该变量,只有实例方法可以
self.value = 20
# 定义静态方法
@staticmethod
def run():
# 访问Myclass类中的静态变量name,但不能直接访问,需加类前缀Myclass.name;即静态方法不会继承类内的变量,需单独引用(与外界一般函数相同)
print('*', Myclass.name, '*')
# print(self.value) # run内没继承self,不能引用self.value
# print(Myclass.value) # 不实例化的类中也没有value
print(Myclass().value) # 实例化后可以调用value
类方法:
- 定义时需加修饰器@classmethod,入口参数为cls,表示类本身而不是实例对象;
- 可以同过实例和类两种形式调用,效果完全相同;
- 继承类自身的静态属性和静态方法