是否可以创建一个在实例化时永远不会抛出 AttributeError 而是调用自己的方法来定义属性的类?
目前,我可以这样做:
class O: pass
o = O()
o.car = O()
o.car.type = "family"
o.car.color = "red"
o.car.trail = O()
o.car.trail.color = "yellow"
o.house = O()
o.house.size = "small"
o.house.number = 87
我正在尝试从一组通用对象中创建任意层次结构。唯一的目的是保存任意数据,即不需要定义class Car:
or class House:
。
现在我想知道是否可以定义一个每次找不到属性时都会调用的“神奇”方法:
class O:
def __magically_define_attribute__(self, name):
setattr(self, name, O())
所以我可以省略所有的O()
s 并简单地做:
o = O()
o.car.type = "family"
o.car.color = "red"
o.car.trail.color = "yellow"
o.house.size = "small"
o.house.number = 87
那么有可能吗?如果没有,是否有具体原因?
(是的,它是关于数据的,所以我知道我可能应该在这里使用字典层次结构,但我仍然想知道这是否可能,因为与 dict 语法相比,点语法显然更容易读写。)