当前位置:首页>python>Python面向对象编程——类、对象、方法总结

Python面向对象编程——类、对象、方法总结

  • 2026-10-11 08:08:03
Python面向对象编程——类、对象、方法总结

在Python中,类(class)是创建对象的蓝图,对象(object)是类的具体实例。理解类中的各种方法(实例方法、类方法、静态方法、属性方法及特殊方法)是掌握面向对象编程的核心。

1. 类与对象的基本定义

classStudent:
"""学生类,包含基本属性和方法"""

# 类属性(所有实例共享)
    school = "第一中学"

def__init__(self, name, age):
"""构造方法,创建实例时自动调用"""
        self.name = name      # 实例属性
        self.age = age
        self._score = 0# 受保护的属性(约定)

# 实例方法:第一个参数为self,可访问实例属性和方法
defintroduce(self):
returnf"我叫{self.name},今年{self.age}岁。"

# 实例方法修改实例属性
defset_score(self, score):
if0 <= score <= 100:
            self._score = score
else:
raise ValueError("分数必须在0-100之间")

2. 实例方法、类方法与静态方法

方法类型
定义方式
第一个参数
调用方式
可访问内容
实例方法
普通函数
self实例.方法()
 或 类.方法(实例)
实例属性、类属性、其他实例方法
类方法
@classmethod
 装饰器
cls类.方法()
 或 实例.方法()
类属性、其他类方法,不能直接访问实例属性
静态方法
@staticmethod
 装饰器
无特殊参数
类.方法()
 或 实例.方法()
仅通过传入的参数工作,与类/实例无强制绑定
classStudent:
    school = "第一中学"

def__init__(self, name, age):
        self.name = name
        self.age = age

# 实例方法
defget_info(self):
returnf"{self.name}, {self.age}岁"

# 类方法(常见于工厂方法或修改类状态)
    @classmethod
defchange_school(cls, new_school):
        cls.school = new_school
        print(f"学校更名为:{cls.school}")

# 静态方法(工具函数,逻辑上属于该类)
    @staticmethod
defis_adult(age):
return age >= 18

使用示例:

# 实例方法
stu = Student("小明", 15)
print(stu.get_info())          # 小明, 15岁

# 类方法
Student.change_school("实验中学")  # 学校更名为:实验中学
print(Student.school)           # 实验中学

# 静态方法
print(Student.is_adult(15))     # False
print(Student.is_adult(20))     # True

3. 属性(@property):将方法伪装成属性

使用 @property 装饰器可以像访问属性一样调用方法,便于实现校验、只读或计算属性。相当于getter方法。

classCircle:
def__init__(self, radius):
        self._radius = radius   # 私有属性

    @property
defradius(self):
"""半径的getter"""
return self._radius

    @radius.setter
defradius(self, value):
"""半径的setter,增加校验"""
if value <= 0:
raise ValueError("半径必须为正数")
        self._radius = value

    @property
defarea(self):
"""只读属性:面积"""
return3.14159 * self._radius ** 2

# 使用
c = Circle(5)
print(c.radius)    # 5(像属性一样访问)
c.radius = 10# 触发setter
print(c.area)      # 314.159(只读,不能赋值)

4. 常用特殊方法(魔术方法)

特殊方法
触发时机
作用
__init__(self, ...)
创建实例后
初始化实例属性
__str__(self)print(实例)
 或 str()
返回用户友好的字符串
__repr__(self)
交互式环境直接输入实例
返回开发者友好的字符串,应可eval
__len__(self)len(实例)
返回长度
__add__(self, other)实例 + 其他
定义加法行为
classVector:
def__init__(self, x, y):
        self.x = x
        self.y = y

def__str__(self):
returnf"Vector({self.x}, {self.y})"

def__repr__(self):
returnf"Vector({self.x}, {self.y})"

def__add__(self, other):
return Vector(self.x + other.x, self.y + other.y)

def__len__(self):
return int((self.x**2 + self.y**2)**0.5)  # 模长取整

v1 = Vector(3, 4)
v2 = Vector(1, 2)
print(v1 + v2)        # Vector(4, 6)
print(len(v1))        # 5

5. 完整综合示例:银行账户类

classBankAccount:
"""银行账户类,演示多种方法的综合使用"""
    bank_name = "Python Bank"# 类属性
    account_count = 0# 统计开户总数

def__init__(self, owner, balance=0):
        self.owner = owner
        self._balance = balance
        BankAccount.account_count += 1
        self._account_id = BankAccount.account_count

# 实例方法
defdeposit(self, amount):
if amount > 0:
            self._balance += amount
            print(f"存入{amount}元,余额{self._balance}元")
else:
            print("存款金额必须为正数")

defwithdraw(self, amount):
if0 < amount <= self._balance:
            self._balance -= amount
            print(f"取出{amount}元,余额{self._balance}元")
else:
            print("余额不足或金额无效")

# 属性方法:只读余额
    @property
defbalance(self):
return self._balance

# 属性方法:可读写账户ID(演示setter)
    @property
defaccount_id(self):
return self._account_id

# 类方法:修改银行名称
    @classmethod
defrename_bank(cls, new_name):
        cls.bank_name = new_name

# 静态方法:利息计算工具
    @staticmethod
defcalc_interest(principal, rate, years):
return principal * (1 + rate) ** years

# 特殊方法:打印友好信息
def__str__(self):
returnf"账户[{self.account_id}] 持有人:{self.owner},余额:{self.balance}元"

def__repr__(self):
returnf"BankAccount('{self.owner}', {self.balance})"

# 使用演示
acc1 = BankAccount("张三", 1000)
acc2 = BankAccount("李四")
print(acc1)                      # 账户[1] 持有人:张三,余额:1000元
acc1.deposit(500)                # 存入500元,余额1500元
acc1.withdraw(200)               # 取出200元,余额1300元
print(acc1.balance)              # 1300(属性方式)
BankAccount.rename_bank("Python Global Bank")
print(BankAccount.bank_name)     # Python Global Bank
interest = BankAccount.calc_interest(1000, 0.05, 3)
print(f"1000元存3年,5%利率,本息和:{interest:.2f}")  # 1157.63

总结

概念
要点
类与对象
类是模板,对象是实例。__init__ 初始化实例属性。
实例方法
最常用,操作实例数据,第一个参数为 self。
类方法
操作类属性或创建工厂方法,用 @classmethod,参数 cls。
静态方法
工具函数,逻辑上属于类但无需访问类或实例,用 @staticmethod。
属性@property
 将方法变为属性,支持 getter/setter/deleter。
特殊方法
让自定义类支持内置函数(len、str)和运算符(+、-)。

掌握这些方法,就能写出清晰、可复用且符合Python惯例的面向对象代码。建议你动手运行以上示例,并尝试添加 __sub__、__eq__ 等更多特殊方法,加深理解。

最新文章

随机文章