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代表这个类
静态方法 没有默认的参数,像函数一样

posted @ 2020-10-24 20:56  maday  阅读(231)  评论(0)    收藏  举报