Python面向对象高级编程:__slots__与@property

0 下载量 100 浏览量 更新于2024-08-30 收藏 130KB PDF 举报
"这篇Python学习笔记主要探讨了面向对象编程的高级特性,包括使用`__slots__`优化内存使用,使用`@property`装饰器管理属性,多重继承、Mix-in以及定制类的方法如`__str__`、`__iter__`、`__getitem__`、`__getattr__`和`__call__`。此外,还提到了枚举类的使用以及元类的概念和`type()`函数。" 在Python中,面向对象编程提供了丰富的特性来增强代码的组织和可维护性。以下是对这些高级特性的详细说明: 1. **使用`__slots__`**:`__slots__`是一个特殊属性,用于指定实例可以拥有的属性名称。这有助于节省内存,因为Python默认会在每个实例中创建一个字典来存储属性。通过在类定义中声明`__slots__`,我们可以限制实例的属性,减少内存消耗。例如: ```python class Student(object): __slots__ = ('name', 'age') ``` 2. **使用`@property`**:`@property`装饰器允许我们将一个方法变成属性调用,从而可以对属性访问进行控制。这样可以确保在设置或获取属性值时执行某些验证或转换操作,如确保score属性在合理范围内: ```python class Student(object): @property def score(self): return self._score @score.setter def score(self, value): if not (0 <= value <= 100): raise ValueError('Score must be between 0 and 100') self._score = value ``` 3. **多重继承与Mix-in**:多重继承允许一个类继承多个父类,从而聚合多种行为。Mix-in是一种设计模式,通常用于提供类的附加功能,不作为最终的对象,而是与其他类组合使用。 4. **定制类的方法**: - `__str__`:定义如何将对象表示为字符串,常用于`print`和`str()`函数。 - `__iter__`:使类成为可迭代对象,支持`for`循环。 - `__getitem__`:实现类似字典的索引访问,如`obj[key]`。 - `__getattr__`:当尝试访问不存在的属性时,Python会调用这个方法。 - `__call__`:让类的实例像函数一样调用,如`obj()`。 5. **使用枚举类`enum`**:Python的`enum`模块提供了枚举类型,用于定义有限集合的不可变对象,常见于状态机、选项等场景。 6. **元类`type()`和`metaclass`**:元类是创建类的类。通过自定义元类,可以定制类的行为,如动态添加方法或属性,或者改变类的生成方式。`type()`函数既是内置类型也是元类,用于创建新类。 这些高级特性让Python的面向对象编程更加灵活和强大,能够处理复杂的逻辑和数据结构,同时保持代码清晰和易于维护。通过熟练掌握这些概念,开发者可以编写出更高效、更优雅的Python代码。