类与对象 #
类是对象的蓝图,对象是类的实例。
一、定义类 #
python
class Person:
"""人员类"""
def __init__(self, name, age):
"""初始化方法"""
self.name = name
self.age = age
def greet(self):
"""问候方法"""
return f"Hello, I'm {self.name}"
def __str__(self):
return f"Person({self.name}, {self.age})"
# 创建对象
person = Person("Tom", 25)
print(person.name) # "Tom"
print(person.greet()) # "Hello, I'm Tom"
print(person) # "Person(Tom, 25)"
二、类属性和实例属性 #
python
class Student:
# 类属性(所有实例共享)
school = "Python School"
count = 0
def __init__(self, name):
# 实例属性(每个实例独有)
self.name = name
Student.count += 1
s1 = Student("Tom")
s2 = Student("Jerry")
print(s1.school) # "Python School"
print(Student.count) # 2
# 修改类属性
Student.school = "New School"
print(s1.school) # "New School"
三、实例方法、类方法、静态方法 #
python
class MyClass:
class_var = "类变量"
def __init__(self, value):
self.instance_var = value
# 实例方法
def instance_method(self):
return f"实例方法:{self.instance_var}"
# 类方法
@classmethod
def class_method(cls):
return f"类方法:{cls.class_var}"
# 静态方法
@staticmethod
def static_method():
return "静态方法"
obj = MyClass("值")
print(obj.instance_method()) # 实例方法
print(MyClass.class_method()) # 类方法
print(MyClass.static_method()) # 静态方法
四、__init__和其他特殊方法 #
python
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def __str__(self):
return f"{self.title} by {self.author}"
def __repr__(self):
return f"Book('{self.title}', '{self.author}')"
def __len__(self):
return len(self.title)
def __eq__(self, other):
return self.title == other.title
def __getitem__(self, key):
if key == 'title':
return self.title
elif key == 'author':
return self.author
book = Book("Python Guide", "Tom")
print(str(book)) # "Python Guide by Tom"
print(len(book)) # 12
print(book['title']) # "Python Guide"
五、属性访问控制 #
python
class BankAccount:
def __init__(self, balance):
self._balance = balance # 保护属性(约定)
@property
def balance(self):
"""getter"""
return self._balance
@balance.setter
def balance(self, value):
"""setter"""
if value >= 0:
self._balance = value
else:
raise ValueError("余额不能为负")
account = BankAccount(1000)
print(account.balance) # 1000
account.balance = 2000 # 使用setter
六、总结 #
| 概念 | 说明 |
|---|---|
| 类 | 对象的模板 |
| 对象 | 类的实例 |
__init__ |
初始化方法 |
self |
实例本身 |
| 类属性 | 所有实例共享 |
| 实例属性 | 每个实例独有 |
@classmethod |
类方法装饰器 |
@staticmethod |
静态方法装饰器 |
@property |
属性装饰器 |
最后更新:2026-03-16