2016-10-08 5 views
1

私はクラスメンバ関数aとデフォルト値のpを持つクラスAを持っています。このデフォルト値をクラスのメンバー変数にします。パラメータとしてのPythonメンバー変数

class A: 
    def a(self, p = self.b): 
     print p 

それは情報で墜落しかし:

<ipython-input-2-a0639d7525d3> in A() 
     1 class A: 
----> 2  def a(self, p = self.b): 
     3   print p 
     4 

NameError: name 'self' is not defined 

私は、メンバ関数へのデフォルトパラメータとしてメンバ変数を渡すことができるかどうか知りたいですか?

答えて

3

1つのオプションは、Noneとしてデフォルトp値を設定し、方法自体にその値をチェックするために、次のようになります。

class A: 
    def __init__(self, b): 
     self.b = b 

    def a(self, p=None): 
     if p is None: 
      p = self.b 
     print(p) 

デモ:

In [1]: class A: 
    ...:  def __init__(self, b): 
    ...:   self.b = b 
    ...: 
    ...:  def a(self, p=None): 
    ...:   if p is None: 
    ...:    p = self.b 
    ...:   print(p) 
    ...:   

In [2]: a = A(10) 

In [3]: a.a() 
10 

In [4]: a.a(12) 
12 
+0

私はいくつかのパラメータを持っていると私はしたくありませんそれらを一つずつ判断する。これを関数にwrapすることはできますか? 1つの問題は、関数にワーピングされた場合、値変数を関数に設定できないことです。 – maple

+0

@maple大丈夫です、それはそれを拡大するものではありません。すべてのメソッド引数に同じ 'self.b'デフォルト値を指定しますか?ありがとう。 – alecxe

+0

私はそれらが異なるデフォルト値を持ち、ファンクションで設定することができます。 – maple

関連する問題