Python成员方法案例如何编写方法

wen python案例 26

本文目录导读:

Python成员方法案例如何编写方法

  1. 基础成员方法示例
  2. 完整的学生管理系统案例
  3. 特殊方法(魔法方法)案例
  4. 属性装饰器方法
  5. 实用工具类案例

我来为你详细介绍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成员方法的主要类型和使用模式:

  1. 实例方法:最常用,需要self参数
  2. 类方法:@classmethod装饰,访问类变量
  3. 静态方法:@staticmethod装饰,工具函数
  4. 特殊方法xx格式,实现特定功能
  5. 属性方法:@property装饰器,控制属性访问

选择建议:

  • 需要访问实例变量 → 实例方法
  • 需要访问类变量 → 类方法
  • 不需要访问实例或类 → 静态方法
  • 想控制属性访问 → 属性方法
  • 想让对象支持运算符 → 特殊方法

抱歉,评论功能暂时关闭!