在一节课的开头或结尾放上init戡是最佳实践吗?

2024-09-30 20:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下代码:

class AClass():

    def defaultMethod(self):
        return 1

    def __init__(self, methodToUse = defaultMethod):
        print (methodToUse(self))

if __name__== "__main__":
    AClass()

在这种情况下,不能将defaultMethod移到\uUinit_UuMethod下面,如果我这样做,会导致“NameError:name'defaultMethod'未定义”

这意味着我需要在优init_uu或Python不知道它之前定义这个方法。这再一次意味着我不再把giu init_uu作为第一个方法,这让我想知道通常是将u init_uu方法放在类的末尾还是在类的开头。在


Tags: 方法代码nameselfreturnifinitmain
3条回答

我觉得你做事有点特别。如果不是第一个方法,您仍然应该将__init__放高。可读性是关键,并且__init__显示您期望的主实例字段。在

这里有三种选择。我更喜欢第一种方法,因为它记录了默认方法,并且需要对代码进行最少的修改。最后一种方法可行,但对于任何需要维护代码的人来说,这可能会令人困惑。在

class A(object):
    def __init__(self, method="foo"):
        if callable(method):
            method(self)
        else:
            getattr(self, method)()
    def foo(self):
        print "something"


class B(object):
    def __init__(self, method = None):
        if method is None:
            self.defaultMethod()
        else:
            method(self)
    def defaultMethod(self):
        print "foo"


def _defaultMethod(self):
    print self.x

class C(object):
    def __init__(self, method = _defaultMethod):
        self.x = "bleh"
        method(self)
    def anotherMethod(self):
        print "doing something else"
    def defaultMethodProxy(self):
        _defaultMethod(self)

“我需要在init或Python不知道它之前定义这个方法”是什么意思?在

>>> class A(object):
...     def __init__(self):
...         self.foo()
...     def foo(self):
...         print '42'
... 
>>> A()
42

我通常会将uInit_Uu()放在其他实例方法之前,但放在类方法/属性/属性之后。在

__init__通常放在类的开头,因为它们是实例化类时运行的第一件事。由于您的情况要求它存在于类的更底层,所以其他开发人员最好在类的注释中留下注释。在

相关问题 更多 >