类与对象 #

类是对象的蓝图,对象是类的实例。

一、定义类 #

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