30.静态方法(staticmethod)和类方法(classmethod)
staticmethod 静态方法
在完全面向对象的程序中,如果一个函数即没有对象也没有运算关系。就用staticmethod将这个函数变成静态方法。不讲此类实例化就可以调用其中的静态方法。
class Login: def __init__(self,name,pwd): self.name=name self.pwd=pwd def login(self):pass @staticmethod def get_use(): use=input('用户名') pwd=input('密码') Login(use,pwd) Login.get_use() #没有实例化就先调用方法。
以上代码是一个用来登录的类,在登录前需要用户输入用户名和密码,在面向对象编程时这些需要写入类中,但是不能实例化一个对象就想先调用这个函数,就使用@staticmethod。
classmethod 类方法
在一个类中,类中的方法只能由类来调用,类实例化后的对象无法调用该方法,就需要使用@classmethod
使用场景:当这个方法只涉及静态属性的时候,就应该使用@classmethod
class Goods: _discount=0.8 def __init__(self,name,price): self.name=name self.price=price def new_price(self): return self.price*Goods._discount @classmethod def change_discount(cls,newdiscount): #该方法只涉及静态属性_discount,就可以使用@classmethod cls._discount=newdiscount Goods.change_discount(0.6) #只能类来调用
类方法和静态方法都是设计来给类调用的
但是对象也可以调用类方法和静态方法,在实际开发中,推荐类名调用
静态方法有一个默认参数cls代表这个类
静态方法 没有默认的参数,像函数一样

浙公网安备 33010602011771号