Python 如何在类内使用函数'__初始化函数

Python 如何在类内使用函数'__初始化函数,python,class,python-2.7,Python,Class,Python 2.7,在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} 我不知道为什么

在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

如果您已经阅读了第一个示例中的错误消息,那么这可能会给您一个线索

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

不确定这是否适合您的用例,但如果
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

时对其进行更新。您的第二个示例适用于我。。。此外,通常情况下,将函数放在函数中并不总是一个好主意。@Zizouz212将函数包装到另一个函数中并不少见-和中有一些示例非常有用。@Zizouz212--我不太喜欢在另一个函数中定义函数。但是我认为没有理由不从另一个函数调用函数。能够在另一个函数中定义函数是非常强大的。这就是为什么C++、C语言和java必须实现lambdas(python有它们,但是它们不需要经常使用)。另请参见:好的,我接受此代码。它修复了我程序中的错误。谢谢。@EricVonB:那你能检查一下我的答案作为解决方案吗?