Python在类中声明属性的约定是什么?

2024-04-28 12:45:55 发布

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

在Python中,我可以在整个类中声明属性。例如:

class Foo:
def __init__(self):
    self.a = 0

def foo(self):
    self.b = 0

当我有一个具有很多属性的大类时,很难检索类中的所有属性。在

下面的代码(a)还是下面的代码(b)更好:

a)在这里,很难找到所有属性:

^{pr2}$

b)在这里,很容易找到所有属性,但它是否漂亮?在

class Foo:
    def __init__(self):
        (self.a, self.b) = foo_1()
        self.c = foo_2()

    def foo_1(self):
        a = 0
        b = 0
        return (a, b)

    def foo_2(self):
        c = 0
        return c

简而言之,在类中声明属性的约定是什么?

编辑:

当然,这是一个简单的例子,这里没有必要改进我的代码。想象一下,一个复杂的类有很多“小方法”(用来划分代码,提高可读性)在init_()中调用。在


Tags: 方法代码self声明编辑return属性foo
3条回答

这有什么问题:

class Foo:
    def __init__(self):
        self.a = 0
        self.b = 1
        self.c = 2

或者,如果ab和{}以某种方式相关,则可以在一行上声明它们:

^{pr2}$

或者,如果ab和{}在某种程度上是相关的,并且您将它们初始化为相同的不可变值,则可以在单个赋值中声明它们:

class Foo:
    def __init__(self):
        self.a = self.b = self.c = 0

首先,这里讨论的不是类属性,而是实例属性。我的惯例是在构造函数中只包含所有这些参数,如果它们在另一个方法中初始化,则值为None。这样我就可以知道会发生什么。这有点像声明它们,尽管这不是强制性的。在

例如:

class Foo(object):
    def __init__(self, a=None, b=None, c=None):
        self.a = a
        self.b = b
        self.c = c

好吧,我也喜欢用initializer作为关键字参数,这使得它更灵活。我也可以用这种方式轻松地覆盖默认值。在

理想情况下,构造函数不应调用方法:a constructor should not do real work。在

如果属性的数量增长过度,您应该重构类,例如使用Extract Class将类分成几个类,从而尊重single responsibility principle。在

相关问题 更多 >