在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_()中调用。在
这有什么问题:
或者,如果}以某种方式相关,则可以在一行上声明它们:
^{pr2}$a
、b
和{或者,如果}在某种程度上是相关的,并且您将它们初始化为相同的不可变值,则可以在单个赋值中声明它们:
a
、b
和{首先,这里讨论的不是类属性,而是实例属性。我的惯例是在构造函数中只包含所有这些参数,如果它们在另一个方法中初始化,则值为None。这样我就可以知道会发生什么。这有点像声明它们,尽管这不是强制性的。在
例如:
好吧,我也喜欢用initializer作为关键字参数,这使得它更灵活。我也可以用这种方式轻松地覆盖默认值。在
理想情况下,构造函数不应调用方法:a constructor should not do real work。在
如果属性的数量增长过度,您应该重构类,例如使用Extract Class将类分成几个类,从而尊重single responsibility principle。在
相关问题 更多 >
编程相关推荐