四时宝库

程序员的知识宝库

python中的instance、static和class方法有什么区别?

实例方法 :接受 self 参数并与类的特定实例相关。

静态方法:使用 @staticmethod 装饰器,与特定实例无关,并且是自包含的(不要修改类或实例属性)

类方法:接受 cls 参数,可以修改类本身

将说明虚构 CoffeeShop 类的区别。

class CoffeeShop:
    specialty = 'espresso'
    
    def __init__(self, coffee_price):
        self.coffee_price = coffee_price
    
    # instance method
    def make_coffee(self):
        print(f'Making {self.specialty} for ${self.coffee_price}')
    
    # static method    
    @staticmethod
    def check_weather():
        print('Its sunny')    # class method
    @classmethod
    def change_specialty(cls, specialty):
        cls.specialty = specialty
        print(f'Specialty changed to {specialty}')

CoffeeShop class 的属性 是 specialty 默认设置为 'espresso' 的。的每个实例 CoffeeShop 都使用一个属性 coffee_price 进行初始化。它还有 3 个方法,一个实例方法、一个静态方法和一个类方法。

coffee_price 初始 化咖啡店的实例。然后调用 instance 方法 make_coffee

coffee_shop = CoffeeShop('5')
coffee_shop.make_coffee()
#=> Making espresso for $5

现在调用静态方法。静态方法不能修改类或实例状态,因此它们通常用于实用函数,例如,添加 2 个数字。我们用我们的来检查天气。

coffee_shop.check_weather()
#=> Its sunny

现在让使用 class 方法修改咖啡店的特色菜,然后 make_coffee .

coffee_shop.change_specialty('drip coffee')
#=> Specialty changed to drip coffeecoffee_shop.make_coffee()
#=> Making drip coffee for $5

注意过去是如何 make_coffee 制作的,但现在是如何制作的 espresso drip coffee

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接