class meothods 类方法
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_area(self):
return self.width * self.height
@classmethod
def new_square(cls, side_length):
return cls(side_length, side_length)
square = Rectangle.new_square(5)
print(square.calculate_area())
25
new_square 是类方法在类上调用,而不是在类的实例上调用。他返回cls类的新
从技术上讲,参数自身和cls只是约定,他们可以被改为其他东西
静态方法类似于类方法,只是他们不接受任何附加参数 ,静态方法装饰器标记
class Pizza:
def __init__(self, toppings):
self.toppings = toppings
@staticmethod
def validate_topping(topping):
if topping == "pineapple":
raise ValueError("No pineapples!")
else:
return True
ingredients = ["cheese", "onions", "spam"]
if all(Pizza.validate_topping(i) for i in ingredients):
pizza = Pizza(ingredients)