实例方法 :接受 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 !