我应该在__init__完成之前在成员函数中使用实例变量吗?

时间:2016-11-15 21:05:35

标签: python

例如,请考虑以下类:

class A:
    def __init__(self):
        self.attr1 = value
        self.attr2 = self.foo()
    def foo(self):
        return self.attr1 ** 2

这是正确的方法,我应该将attr1作为参数传递给foo,还是应该在课堂外定义foo

1 个答案:

答案 0 :(得分:2)

这是完全正常的,也是一种常见的模式 - 你必须要小心,在调用它之前已经设置了foo()所关注的所有属性。

这在定义容器类时经常使用。例如,类似列表的类:

class ListLike:
    def __init__(self, items=[]):
        self.lst = []
        self.thingy = 'foo'
        for item in items:
            self.add(item)

    def add(self, item):
        self.lst.append(item)