5

对于字典,我们可以使用.get方法。一个类的属性和提供一个默认值呢?

4

2 回答 2

13

您可以使用hasattrgetattr

例如:

hasattr(foo, 'bar')

True如果foo有一个名为 的属性,则返回,bar否则返回False

getattr(foo, 'bar', 'quux')

foo.bar如果存在则返回,否则默认为quux.

于 2013-08-06T17:50:10.573 回答
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

如果您正在寻找一个在设置之前没有属性的对象,那么 Jason 的想法非常好,除非您直接引用该属性。你必须解决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_fooand 。set_my_foo另一个好处是,您可以省略 setter 来创建只读属性,前提是使用您的对象的人不会更改底层的_my_foo.

于 2013-08-06T18:14:52.213 回答