本文目录导读:

我来为你详细介绍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装饰器,控制属性访问
选择建议:
- 需要访问实例变量 → 实例方法
- 需要访问类变量 → 类方法
- 不需要访问实例或类 → 静态方法
- 想控制属性访问 → 属性方法
- 想让对象支持运算符 → 特殊方法
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播