@classmethod  #把一个方法变成类的方法,不需要依托对象,可以直接被类调用,默认传入cls参数

def change_discount(cls,new_discount):

  cls.__discount = new_discount

 

Goods.change_discount(0.5)

#当这个方法的操作只涉及静态属性的时候应该用classmethod装饰这个方法

 

##########################################

 

class Login:

  def __init__(self,name,pwd)

    self.name = name

    self.pwd = pwd

  def login(self):pass

 

  @staticmethod

  def get_usr_pwd():  #静态方法

    usr = input('用户名:')

    pwd = input('密码:')

    Login(usr,pwd)

 

在完全面向对象程序中

如果一个函数,既和对象没关系,也和类没关系,那么就用staticmethod把这个函数变成一个静态方法

 

类方法和静态方法都是类调用的

对象可以调用类方法和静态方法,但是一般推荐用类名调用

类方法有默认参数cls代表这个类(class缩写),类比self代表对象

静态方法没有默认参数,就像函数一样