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