本文目录导读:

我来为你详细介绍Python成员方法的编写案例,从基础到进阶。
基础成员方法示例
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# 实例方法 - 最常用的成员方法
def introduce(self):
"""自我介绍方法"""
return f"我叫{self.name},今年{self.age}岁"
def study(self, subject):
"""学习科目"""
return f"{self.name}正在学习{subject}"
# 使用示例
student = Student("小明", 20)
print(student.introduce()) # 我叫小明,今年20岁
print(student.study("Python")) # 小明正在学习Python
完整的学生管理系统案例
class Student:
# 类变量
school_name = "第一中学"
total_students = 0
def __init__(self, name, age, grade):
# 实例变量
self.name = name
self.age = age
self.grade = grade
self.scores = {}
Student.total_students += 1
# 实例方法1:修改学生信息
def update_info(self, name=None, age=None, grade=None):
"""更新学生信息"""
if name:
self.name = name
if age:
self.age = age
if grade:
self.grade = grade
return f"信息已更新: {self.name}, {self.age}岁, {self.grade}年级"
# 实例方法2:添加成绩
def add_score(self, subject, score):
"""添加单科成绩"""
self.scores[subject] = score
return f"{self.name}的{subject}成绩已记录: {score}"
# 实例方法3:计算平均分
def calculate_average(self):
"""计算平均分"""
if not self.scores:
return 0
return sum(self.scores.values()) / len(self.scores)
# 实例方法4:判断是否及格
def check_pass(self, subject, pass_score=60):
"""检查某科是否及格"""
if subject in self.scores:
return self.scores[subject] >= pass_score
return f"没有{subject}的成绩"
# 类方法
@classmethod
def get_school_info(cls):
return f"学校: {cls.school_name}, 总学生数: {cls.total_students}"
# 静态方法
@staticmethod
def is_valid_age(age):
return 6 <= age <= 30
# 使用示例
if __name__ == "__main__":
# 创建学生实例
stu1 = Student("张三", 18, "高三")
stu2 = Student("李四", 16, "高一")
# 调用实例方法
print(stu1.add_score("数学", 95))
print(stu1.add_score("语文", 88))
print(stu1.add_score("英语", 92))
print(f"{stu1.name}的平均分: {stu1.calculate_average():.1f}")
print(f"数学是否及格: {stu1.check_pass('数学')}")
# 调用类方法
print(Student.get_school_info())
# 调用静态方法
print(f"年龄是否有效: {Student.is_valid_age(18)}")
特殊方法(魔法方法)案例
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
self.current_page = 0
# __str__: 字符串表示
def __str__(self):
return f"《{self.title}》- {self.author}"
# __repr__: 官方表示
def __repr__(self):
return f"Book('{self.title}', '{self.author}', {self.pages})"
# __len__: 长度
def __len__(self):
return self.pages
# __eq__: 等于比较
def __eq__(self, other):
if isinstance(other, Book):
return self.title == other.title and self.author == other.author
return False
# __lt__: 小于比较
def __lt__(self, other):
return self.pages < other.pages
# __add__: 加法运算
def __add__(self, other):
if isinstance(other, Book):
return self.pages + other.pages
return NotImplemented
# 迭代器方法
def __iter__(self):
return self
def __next__(self):
if self.current_page >= self.pages:
self.current_page = 0
raise StopIteration
self.current_page += 1
return f"第{self.current_page}页"
# 使用示例
book1 = Book("Python编程", "张三", 500)
book2 = Book("数据结构", "李四", 400)
book3 = Book("Python编程", "张三", 500)
print(f"字符串: {book1}") # 《Python编程》- 张三
print(f"官方: {repr(book1)}") # Book('Python编程', '张三', 500)
print(f"页数: {len(book1)}") # 500
print(f"相等: {book1 == book3}") # True
print(f"比较: {book1 < book2}") # False
print(f"相加: {book1 + book2}") # 900
# 迭代器使用
print("前3页:")
for i, page in enumerate(book1):
if i >= 3:
break
print(page)
属性装饰器方法
class Temperature:
def __init__(self, celsius=0):
self._celsius = celsius
# getter - 获取属性
@property
def celsius(self):
return self._celsius
# setter - 设置属性
@celsius.setter
def celsius(self, value):
if value < -273.15:
raise ValueError("温度不能低于绝对零度")
self._celsius = value
# 计算属性
@property
def fahrenheit(self):
return self._celsius * 9/5 + 32
@fahrenheit.setter
def fahrenheit(self, value):
self._celsius = (value - 32) * 5/9
# deleter - 删除属性
@celsius.deleter
def celsius(self):
self._celsius = 0
# 使用示例
temp = Temperature(25)
print(f"摄氏温度: {temp.celsius}°C") # 25
print(f"华氏温度: {temp.fahrenheit}°F") # 77.0
# 使用setter
temp.celsius = 30
print(f"更新后: {temp.celsius}°C") # 30
# 使用华氏温度setter
temp.fahrenheit = 100
print(f"转换后: {temp.celsius}°C") # 37.78
# 错误示例
# temp.celsius = -300 # ValueError
实用工具类案例
class DataProcessor:
"""数据处理工具类"""
def __init__(self, data=None):
self.data = data or []
self.processed_data = []
# 添加数据
def add_data(self, item):
self.data.append(item)
return f"已添加: {item}"
# 清除数据
def clear(self):
self.data.clear()
self.processed_data.clear()
return "数据已清除"
# 数据处理方法
def filter_even(self):
"""过滤偶数"""
self.processed_data = [x for x in self.data if x % 2 == 0]
return self.processed_data
def filter_odd(self):
"""过滤奇数"""
self.processed_data = [x for x in self.data if x % 2 != 0]
return self.processed_data
def calculate_statistics(self):
"""计算统计信息"""
if not self.data:
return {"error": "没有数据"}
return {
"总和": sum(self.data),
"平均值": sum(self.data) / len(self.data),
"最大值": max(self.data),
"最小值": min(self.data),
"数据数量": len(self.data)
}
# 链式调用方法
def add(self, value):
self.data.append(value)
return self # 返回self支持链式调用
def multiply(self, factor):
self.data = [x * factor for x in self.data]
return self
# 链式调用示例
processor = DataProcessor()
result = processor.add(1).add(2).add(3).add(4).multiply(2).filter_even()
print(f"链式调用结果: {result}") # [4, 8]
# 统计信息
stats = processor.calculate_statistics()
print(f"统计信息: {stats}")
这些案例涵盖了Python成员方法的主要类型和使用模式:
- 实例方法:最常用,需要self参数
- 类方法:@classmethod装饰,访问类变量
- 静态方法:@staticmethod装饰,工具函数
- 特殊方法:xx格式,实现特定功能
- 属性方法:@property装饰器,控制属性访问
选择建议:
- 需要访问实例变量 → 实例方法
- 需要访问类变量 → 类方法
- 不需要访问实例或类 → 静态方法
- 想控制属性访问 → 属性方法
- 想让对象支持运算符 → 特殊方法