2017-06-27 1 views
1

オプションの引数を持つクラス定義があります。 オプションの引数をインスタンス変数の値で開始したいとします。 これは可能ですか?インスタンス変数と同じ既定値でクラス定義のオプション変数を開始

例:この例では

class Helloworld: 
    def __init__(self): 
     self.var1 = 'abc' 
     self.var2 = 123 

    def printString(info, message=self.var1): 
     print(info + ' - ' + message) 

、私はこれが不可能であるインスタンスと同じ変数var1

答えて

2

号としてprintStringmessage引数を開始します。

printStringが定義されるまでには、インスタンスは存在しない(すなわち、selfは定義されていない)。

代わりに、デフォルト値としてNoneを使用し、必要に応じて割り当てます。また、あなたが通過していないことに注意してください

class Helloworld: 
    def __init__ (self): 
     self.var1 = 'abc' 
     self.var2 = 123 

    def printString (self, info, message=None): 
     if message is None: 
      message = self.var1 
     print(info + ' - ' + message) 

selfprintStringにとてもinfoあなたはそれが期待するかもしれないものは含まれません。

+0

'メッセージ=メッセージやself.var1'がself.var1''になりますが'message'が' 0'、 ''''または 'bool'で' False'と評価される他の値のときです。真実ですが、考えてみる価値はありません - メッセージがメッセージではない場合のメッセージelse else self.var1' – Kendas

+0

+1これは最もPythonのアプローチです – wim

-1

あなたのサンプルコードとDeepSpaceの答えは約インスタンスのメソッドのデフォルトパラメータとして直接使用できない変数です。しかし、あなたはタイトルはクラス変数に関するものであり、実際のサンプルメソッドは静的である可能性があります。

ですから、道クラス変数使用することができます:あなたはそれから使用することができます

class Helloworld: 
    var1 = "abc" # define class variable Foo.var1 
    @staticmethod 
    def printString(info, message=var1): # use it as a default parameter 
     print(info + ' - ' + message) 

Helloworld.printString("123") 
=> 123 - abc 
関連する問題