5

辞書の場合、.getメソッドを使用できます。クラスの属性とデフォルト値の提供についてはどうですか?

4

2 に答える 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 に答える