Python学习基础笔记六十——静态方法和类方法

method: 方法

staticmethod: 静态的方法

classmethod:类方法

例1:

class Goods:
    __discount = 0.8

    def __init__(self, name, price):
        self.name = name
        self.__price = price

    @property
    def price(self):
        return self.__price * Goods.__discount

    @classmethod
    def change_discount(cls, new_discount):
        cls.__discount = new_discount


apple = Goods(Apple, 5)
print(apple.price)
Goods.change_discount(0.5)
print(apple.price)

说明:@classmathod 把一个方法变成了类中的方法,这个方法就直接可以被类调用,不需要依托任何类对象。不实例化对象,我们任然可以修改类的值。

当这个方法的操作只涉及静态属性的时候,就应该使用classmethod来装饰这个方法。

例2:

class Staticmethod_Demo():
    role = dog

    @staticmethod
    def func():
        print("当普通方法用")
Staticmethod_Demo.func()

在完全面向对象的程序中,如果一个函数,即和对象没有关系,也和类乜有关系,那么就用staticmethod这个函数改变成一个静态方法。在调用这个函数的时候加一个类名。类方法和静态方法都是类调用的。

那么对象可以调用类方法和静态方法么?

可以的。但是一般是推荐类名调用。

类方法有一个默认参数,cls代表这个类,self调用对象。

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

经验分享 程序员 微信小程序 职场和发展