一.类的组成
1.类的定义
class Person:
"""定义一个表示人的类"""
pass # 占位符,表示类体为空(后续会填充具体内容)
class Person::定义一个名为Person的类。pass:暂时不写任何逻辑,留待后续补充。
2.类的属性
(1)类属性(Class Attributes)
class Person:
species = "Homo sapiens" # 类属性:所有实例共享
total_people = 0 # 统计创建了多少个实例
- 特点:
- 在类内部直接定义,不在方法中。
- 所有实例共享同一个值。
- 可以通过
类名.属性名或实例.属性名访问。
- 用途:存储与类相关的全局信息(如物种、计数器)。
(2)实例属性(Instance Attributes)
def __init__(self, name, age):
self.name = name # 实例属性:每个实例独立拥有
self.age = age
- 特点:
- 在
__init__方法中通过self.属性名定义。 - 每个实例有独立的值。
- 只能通过
实例.属性名访问。
- 在
- 用途:存储单个对象的状态(如姓名、年龄)。
3. 类的方法
(1) 实例方法(Instance Methods)
def greet(self):
return f"Hello, my name is {self.name} and I am {self.age} years old."
- 特点:
- 第一个参数是
self,代表调用该方法的实例。 - 必须通过实例调用(如
person1.greet())。 - 可以访问实例属性和其他实例方法。
- 第一个参数是
- 用途:操作实例自身的数据。
(2) 类方法(Class Methods)
@classmethod
def get_species(cls):
return cls.species
- 特点:
- 使用
@classmethod装饰器声明。 - 第一个参数是
cls,代表类本身。 - 可通过类名或实例调用(如
Person.get_species())。 - 用于操作类级别的数据(如修改类属性)。
- 使用
- 用途:提供与类相关的功能(如获取默认物种)。
(3) 静态方法(Static Methods)
@staticmethod
def is_adult(age):
return age >= 18
- 特点:
- 使用
@staticmethod装饰器声明。 - 没有
self或cls参数。 - 完全独立于类和实例,仅作为逻辑封装。
- 可通过类名或实例调用(如
Person.is_adult(25))。
- 使用
- 用途:实现与类相关但不需要访问类/实例数据的功能(如工具函数)。
4. 特殊方法(魔术方法)
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
def __del__(self):
print(f"{self.name} has been deleted.")
__str__:控制print()或str()的输出格式。__del__:对象被销毁时自动调用(如引用计数归零)。- 其他常见魔术方法:
__len__,__eq__,__init__等。
5.完整代码
class Person:
# 类属性:所有实例共享
species = "Homo sapiens"
total_people = 0
# 构造函数:初始化实例属性
def __init__(self, name, age):
self.name = name
self.age = age
Person.total_people += 1 # 每创建一个实例,计数器+1
# 实例方法:操作实例数据
def greet(self):
return f"Hello, my name is {self.name} and I am {self.age} years old."
# 类方法:操作类级别的数据
@classmethod
def get_species(cls):
return cls.species
# 静态方法:独立逻辑封装
@staticmethod
def is_adult(age):
return age >= 18
# 魔术方法:自定义字符串表示
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
# 析构函数:清理资源
def __del__(self):
print(f"{self.name} has been deleted.")
Person.total_people -= 1 # 销毁实例时计数器-1
# 测试代码
p1 = Person("Alice", 30)
p2 = Person("Bob", 17)
print(p1.greet()) # 实例方法调用
print(Person.get_species()) # 类方法调用
print(Person.is_adult(p2.age)) # 静态方法调用
print(p1) # __str__ 生效
print(Person.total_people) # 类属性访问
del p1 # 触发 __del__
print(Person.total_people) # 计数器减少

1542

被折叠的 条评论
为什么被折叠?



