classmethod:类方法
主要用于改变静态属性
class Fruit_price: __discount= 1 def __init__(self,original_price): self.__original_price=original_price @property def price(self): return self.__original_price * self.__discount @classmethod def set_discount(cls,new_discount): cls.__discount=new_discount banana=Fruit_price(5) orange=Fruit_price(6) print(orange.price) print(banana.price) Fruit_price.set_discount(0.5) print(Fruit_price._Fruit_price__discount) print(banana.price) print(orange.price) '''输出结果6 5 0.5 2.5 3.0 '''
注意:当改变静态属性是一定类名.方法,否则不会生效。用对象名.方法时什么影响也不会产生。
另外,在定义方法时,cls相当与是一个类名,在定义时,一定是用cls.静态变量 来重新赋值
staticmethon:静态方法
static adj:静态的 n:静电
staticmethod 静态方法
class method: d=10 def __init__(self,num1,num2): self.num1=num1 self.num2=num2 @staticmethod def input1(a,b): c= a+b return c def sum(self): print(self.num1+self.num2) return '' know=method(2,3) method.input1(3,4) print(method.__dict__) print(know.sum())
#输出结果
#{'d': 10, '__dict__': <attribute '__dict__' of 'method' objects>, 'sum': <function method.sum at 0x00000000010926A8>, '__weakref__': <attribute '__weakref__' of 'method' objects>, '__doc__': None, '__module__': '__main__', '__init__': <function method.__init__ at 0x0000000001092510>, 'input1': <staticmethod object at 0x00000000010945F8>}
#5
在类中,@staticmethod时,此方法变独立出去,属于一个单独的定义,与类和对象没有什么关系,在类.__init__中并有找到关于c的任何信息,只有关于input1函数的一个内存地址
关于staticmethon,classmethon方法
两个方法的调用都是关于 类名.方法名来调用的
staticmethod 没有默认参数
classmethod有一个相当于类名的参数cls