我是否将参数或参数本身的副本传递给__init__中的函数?

时间:2017-01-07 14:20:58

标签: python arguments

我想知道以下两种选择中的哪一种更好,或者更像Pythonic:

  1. 直接使用__init__参数作为__init__中调用的函数的参数:

    def class A(object):
        def __init__(self, x):
            self.x = x # I would like to do this anyway
            self.y = foo(x)
            # More code
    
  2. 使用作为参数副本的__init__属性作为__init__内调用的函数的参数:

    def class B(object):
        def __init__(self, x):
            self.x = x # I would like to do this anyway
            self.y = foo(self.x)
            # More code
    
  3. A和B类的行为应该相同。但是:

    1. 第一种选择是不那么冗长,因为避免了很多self.打字,而且代码更具可读性。

    2. 对于代码中的进一步更改,第二种替代方案可能更加健壮。

    3. A或B中的哪一个更好?或者也许没关系?

1 个答案:

答案 0 :(得分:2)

这很重要。不必输入self就好了,Python不必进行属性查找。

但是,如果self.x是一个属性,它在某种程度上会在设置或获取时转换该值,那么您别无选择,具体取决于是否需要使用原始属性x或已转换的self.x