代码之家  ›  专栏  ›  技术社区  ›  SuperCiocia

Python-类方法和<code>self中的默认值

  •  1
  • SuperCiocia  · 技术社区  · 6 年前

    我有以下类和方法:

    class Basis(object):
    
     def __init__(self, P = {'dimension': 1, 'generation':1}):
    
      self.P = P
      self.P['angle'] = np.pi/4
    

    P 是一个 dict 不包括 'angle'

    现在我有一个方法:

    def make_projection(self, dimension, angle = np.pi/4):
     return (angle*3)
    

    我想设置 angle 在这个函数中 self.P['angle']
    我不想使用 在函数的主代码中,因为我可能单独使用该方法,给它一个不同的角度。

    如果我这样做: def make_projection(self, dimension, angle = self.P['angle']): ,它同时强调 self

    --

    这是允许我做的吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Kamil    6 年前

    首先,方法中关键字参数的默认值不能是可变对象,如 list , dict 等等。 Here 你可以理解为什么。

    其次,在 def make_projection(self, dimension, angle = self.P['angle']) self 变量仍然未定义,因此可以 self.P 只在方法的身体里。

    class Basis(object):
    
      def __init__(self, P=None):
        self.P = P or {'dimension': 1, 'generation':1}
        self.P['angle'] = np.pi/4
    
      def make_projection(self, dimension, angle=None):
        angle = angle if angle is not None else self.P['angle']  # we must compare to None, because angle can be 0.
        return angle*3
    
        2
  •  2
  •   6502    6 年前

    当函数为 定义 ,当函数为 打电话

    你需要做如下事情:

    def foo(self, x, y=None):
        if y is None:
            y = self.defval