class 是用来定义一个物件型态的工具,像是 int、str 一样,但更灵活,因为你可以完全自定义属性(资料)和方法(行为)。这使得 class 成为实现面向物件程式设计 (Object-Oriented Programming, OOP) 的基石。
更多有关于class文章:Python 类别 class方法解析顺序 (MRO, Method Resolution Order) Python 装饰器 (decorator): @staticmethod@classmethod 是 Python 中的一个装饰器 (decorator),用来定义类别方法 (class method)。与一般的实例方法不同,类别方法是直接与类别本身相关联的,而不是物件实例。
特点
- cls 是类别的参考(类似于实例方法中的 self)。
- 它允许你访问类别层级的属性或方法。
语法
class MyClass:
@classmethod
def class_method(cls, arg1, arg2):
# cls 指向类别
pass
范例 1:访问类别属性
class Dog:
species = "Canine" # 类别属性
@classmethod
def get_species(cls):
return cls.species # 访问类别属性
# 类别本身调用
print(Dog.get_species()) # Canine
# 物件实例调用
buddy = Dog()
print(buddy.get_species()) # Canine
范例 2:工厂方法
类别方法常用于创建物件的工厂方法,用来基于不同的输入创建物件。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_birth_year(cls, name, birth_year):
# 根据出生年份计算年龄并创建物件
age = 2024 - birth_year
return cls(name, age) # 使用 cls 创建物件
# 使用普通初始化
p1 = Person("Alice", 30)
print(p1.name, p1.age) # Alice 30
# 使用类别方法初始化
p2 = Person.from_birth_year("Bob", 1995)
print(p2.name, p2.age) # Bob 29
范例 3:与 @staticmethod 的比较
@staticmethod 是另一个装饰器,用来定义静态方法(不需要 self 或 cls)。装饰器 使用场景 是否需要 self 或 cls@classmethod 操作类别属性,创建工厂方法 需要 cls(代表类别)@staticmethod 状态独立的工具函数 不需要 self 或 cls
范例对比:
class Example:
counter = 0 # 类别属性
@classmethod
def increment(cls):
cls.counter += 1 # 操作类别属性
return cls.counter
@staticmethod
def greet():
return "Hello!"
print(Example.increment()) # 1
print(Example.greet()) # Hello!
更多有关于class文章: Python 装饰器 (decorator): @staticmethod