我想知道是否可以创建具有以下属性的Python类:
例如:
class A(dict):
def __init__(self, name):
self.name = name
self['a'] = 1
self['b'] = 2
a = A('a')
当调用实例a
时,它将返回1
所定义的'a'
。通过密钥的原始访问仍然可用。
问题X:
我有一个继承自Fruits
的课程dict
。在self
中,它可以有多个类Fruit
的实例,但通常只有一个实例。因此,当我使用Fruits
的实例时,我想使用该单个实例的方法和属性,就像它们是A
的属性和方法一样:
class Fruit(object):
def __init__(self):
self.name = 'apple'
class Fruits(dict):
def __init__(self, name):
self.fruit_name = name
self['apple'] = Fruit()
a = Fruits('apple')
我希望a.name
返回'apple'
。我有@property
的解决方案:
class Fruits(dict):
def __init__(self, name):
self.fruit_name = name
self['apple'] = Fruit()
@property
def name(self):
return self[self.fruit_name].name
但我正在寻找更好的东西......
答案 0 :(得分:0)
不确定我是否完全按照您的问题,但您无法直接调用实例;你可以在实例中调用一个函数。现在,由于a
是dict
的实例,因此您可以访问其密钥 -
In [9]: a['a']
Out[9]: 1
或者,
In [10]: a[a.name]
Out[10]: 1
您可以在__call__
A
方法
class A(dict):
def __init__(self, name):
self.name = name
self['a'] = 1
self['b'] = 2
def __call__(self):
return self[self.name]
然后,
In [24]: a = A('a')
In [25]: a()
Out[25]: 1
这是否与你正在寻找的一致?