python中的__slots__
时间: 2023-07-02 22:04:04 浏览: 93
`__slots__` 是一个特殊的属性,用于限制动态地为实例添加属性和方法。正常情况下,Python 类的实例可以随意地动态地添加新的属性或方法,这就导致了一些问题,例如浪费内存、可能会与类中已有的属性或方法名称冲突等。
使用 `__slots__` 可以限制实例的属性和方法,从而解决上述问题。具体来说,`__slots__` 是一个元组,包含了类的实例允许定义的属性和方法的名称。如果一个类有 `__slots__` 属性,那么其实例不能动态地添加除了 `__slots__` 中指定的属性和方法之外的其他属性和方法。
例如,下面的代码示例定义了一个名为 `Person` 的类,其中 `__slots__` 属性中指定了 `name`、`age` 和 `gender` 三个属性:
```python
class Person:
__slots__ = ('name', 'age', 'gender')
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
```
在这个示例中,实例 `p` 可以访问并修改 `name`、`age` 和 `gender` 这三个属性,但是不能添加其他属性或方法,否则会抛出 `AttributeError` 异常。例如,下面的代码会抛出异常:
```python
p = Person('Alice', 20, 'female')
p.height = 170 # 抛出 AttributeError: 'Person' object has no attribute 'height'
```
需要注意的是,`__slots__` 属性不会影响类本身的属性和方法,仅仅是影响其实例的属性和方法。因此,如果在子类中重新定义了 `__slots__` 属性,则它只会影响到子类的实例,而不会影响到父类或其他子类的实例。
阅读全文