روش های اشیائی که تا به حال مورد بررسی قرار گرفته اند، توسط یک نمونه از کلاس نامیده می شوند و سپس به پارامتر خود از روش منتقل می شوند. روش های کلاس متفاوت هستند - آنها توسط یک کلاس نامیده می شوند، که به پارامتر cls از روش منتقل می شود. استفاده معمول از این روش های کارخانه ای است که نمونه ای از یک کلاس را با استفاده از پارامترهای مختلف از آنچه معمولا به سازنده کلاس منتقل می شود، نمونه برداری می کند. روش های کلاس با استفاده از دکوراتور کلاس متداول مشخص می شود. مثال:
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 یک روش کلاس است و در کلاس به نام یک نمونه از کلاس نامیده می شود. این یک شی جدید از class cls را باز می کند.
نکته:از لحاظ فنی، پارامترهای self و cls فقط توافقنامه هستند؛ آنها را می توان به هر چیز دیگری تغییر داد. با این حال، آنها به طور جهانی دنبال می شوند، بنابراین عاقلانه است که به استفاده از آنها بپردازیم. روش های استاتیک شبیه به روش های کلاس هستند، به جز آنها هیچ استدلالی اضافی دریافت نمی کنند. آنها یکسان هستند با توابع عادی که متعلق به یک کلاس هستند. آنها با دکوراتور staticmethod مشخص می شوند. مثال:
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)
نکته:روش های استاتیک مانند توابع ساده عمل می کنند، به جز این واقعیت که شما می توانید آنها را از یک نمونه از کلاس فراخوانید.