Python黑魔法系列之创建动态类属性
[2]博客文章
python
python黑魔法
在面向对象编程中,我们一般把名词性的东西映射成属性,动词性的东西映射成方法。在python中他们对应的分别是属性
self.xxx
和类方法。但有时我们需要的属性需要根据其他属性动态的计算,此时如果直接使用属性方法处理,会导致数据不同步。本文介绍了使用__getattr__
和@property
两种方法来动态创建类属性。
问题
假定我们现在有一个矩形类,有以下属性和方法:
- 属性:长,宽
- 方法:平移,旋转
这是一个很常规的类,我们很容易写出代码如下:
class Rectangle(object):
def __init__(self, width=0, height=0):
self.width = width
self.height = height
def rotate(self):
pass
def move(self):
pass
如果此时我们需要添加一个属性面积,那么该怎么做呢?
添加self.area
属性
最直观的想法是在__init__
中添加