在Python 2.7中,我有这个类定义:
class foo:
def __init__(self,ahg):
self.ahg=ahg
def oaf(arg):
return arg*2
self.tooAhg=self.oaf(self.ahg)
在控制台,我发表以下声明
>>> bibi=foo(1)
>>> vars(bibi)
{'ahg': 1}
我不知道为什么vars(bibi)
不会返回{'ahg': 1, 'tooAhg': 2}
。请帮忙!此外,
另一个不成功的策略是:
class foo:
def __init__(self,ahg):
self.ahg=ahg
self.tooAhg=self.oaf()
def oaf(self):
return self.ahg*2
答案 0 :(得分:4)
如果您已经阅读了第一个示例中的错误消息,那么可能会给您一些线索。
self.tooAhg=self.oaf(self.ahg)
AttributeError: foo instance has no attribute 'oaf'
函数名称为oaf
,而不是self.oaf
。
class foo:
def __init__(self,ahg):
self.ahg=ahg
def oaf(arg):
return arg*2
self.tooAhg=oaf(self.ahg)
bibi=foo(1)
print vars(bibi)
给出:
{'tooAhg': 2, 'ahg': 1}
如果要使函数oaf
成为对象的属性,则:
self.oaf = oaf
答案 1 :(得分:1)
不确定这是否适合您的用例,但如果tooAhg
必须始终为2*ahg
,则应使用属性:
class Foo(object):
def __init__(self, ahg):
self.ahg = ahg
@property
def tooAhg(self):
return 2 * self.ahg
现在,您可以像访问任何其他类字段(例如tooAhg
)一样访问self.tooAhg
,而无需在每次更新ahg