辞書の場合、.get
メソッドを使用できます。クラスの属性とデフォルト値の提供についてはどうですか?
質問する
10718 次
2 に答える
2
それは非常に簡単です: キーワード引数を使用します。
>>> class Foo(object):
... def __init__(self, my_foo=None):
... self.my_foo = my_foo
...
>>> f = Foo()
>>> f.my_foo
>>> repr(f.my_foo)
'None'
>>> f2 = Foo(2)
>>> f2.my_foo
2
設定するまで属性を持たないオブジェクトを探している場合、属性を直接参照しない限り、ジェイソンのアイデアはかなり良いです。あなたが得ることを回避する必要がありAttributeError
ます。個人的には、インスタンス属性を設定しないために常にtry
/ブロックで囲まれなければならないオブジェクトを作成するのは好きではありません。except
Python は、getter と setter にはあまり向いていません。property()
ただし、次の方法でこの問題を回避できます。
>>> class Foo(object):
... def __init__(self):
... pass
... def get_my_foo(self):
... return getattr(self, "_my_foo", "there's no my_foo")
... def set_my_foo(self, foo):
... self._my_foo = foo
... my_foo = property(get_my_foo, set_my_foo)
...
>>> f = Foo()
>>> f.my_foo
"there's no my_foo"
>>> f.my_foo = "foo!"
>>> f.my_foo
'foo!'
get_my_foo
必要に応じて、 andを呼び出しても同様に機能しset_my_foo
ます。追加の利点は、オブジェクトを使用する誰かが基になる を変更しない限り、セッターを省略して読み取り専用属性を作成できることです_my_foo
。
于 2013-08-06T18:14:52.213 に答える