Python类总结-ClassMethod, StaticMethod

Posted konglinqingfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python类总结-ClassMethod, StaticMethod相关的知识,希望对你有一定的参考价值。

classmethod-把classmethod装饰的方法变成为类中的方法

  • 作用: 把classmethod装饰的方法变成为类中的方法,这个方法直接可以被类调用,不需要依托任何对象
  • 应用场景: 当这个方法只涉及静态属性的时候,就应该使用classmethod装饰这个方法

#类里面的操作行为
class Goods:
    __discount = 0.5
    def __init__(self,name, price):
        self.name = name
        self.__price = price #折扣前价格定义为私有的

    @property
    def price(self): #折扣后的价格定义为一个方法并用property装饰,进行一些操作
        return self.__price*Goods.__discount
    @classmethod #把classmethod装饰的方法变成为类中的方法,这个方法直接可以被类调用,不需要依托任何对象
    def change_discount(cls,new_discount): #cls是固定参数,指代的是该类
        cls.__discount  = new_discount
#当这个方法只涉及静态属性的时候,就应该使用classmethod装饰这个方法
apple = Goods('苹果', 5)
print(apple.price)
Goods.change_discount(0.8)
print(apple.price)

StaticMethod- 把和类无关的方法放入某个类 (借鉴JAVA的一切皆对象的原则)

class Login:
    def __init__(self,name, password):
        self.name = name
        self.password = password
    def login(self):
        pass
    @staticmethod #装饰一个和类无关的方法
    def get_usr_pwd(): #无需传任何参数,self也不要
        usr = input('username:')
        password = input('password:')
        Login(usr,password)
Login.get_usr_pwd() #可以直接调用Login类中get_usr_pwd,且调用之前无需实例化对象

以上是关于Python类总结-ClassMethod, StaticMethod的主要内容,如果未能解决你的问题,请参考以下文章

python类方法@classmethod与@staticmethod

python __builtins__ classmethod类 (11)

Python - 元类装饰器 - 如何使用 @classmethod

python自定制classmethod (类方法)

Python classmethod 修饰符

Python中的classmethod与staticmethod