我希望我的 Python 类在将值分配给属性时自动检查值的类型。
有 enthought 的traits模块,IPython 有一个纯 python 版本作为其子模块IPython.utils.traitlets。有没有类似的模块?如果该模块具有自动命令行参数解析器来设置这些属性,那就更好了。
编辑:感谢您的片段。但我想要 Python库。如果有库可以做到这一点,我不想自己重新实现。
我希望我的 Python 类在将值分配给属性时自动检查值的类型。
有 enthought 的traits模块,IPython 有一个纯 python 版本作为其子模块IPython.utils.traitlets。有没有类似的模块?如果该模块具有自动命令行参数解析器来设置这些属性,那就更好了。
编辑:感谢您的片段。但我想要 Python库。如果有库可以做到这一点,我不想自己重新实现。
我不知道traits
...但是如果您想在分配对象时检查它的类型,您可以覆盖__setattr__
以检查...
class MyClass(object):
def __setattr__(self, attr, val):
if attr == 'my_attr':
if not isinstance(val, str):
raise ValueError('my_attr must be a string!')
else:
object.__setattr__(self, attr, val)
else:
object.__setattr__(self, attr, val)
a = MyClass()
a.my_attr = "Hello World!" # This is OK
a.my_attr = 1 # This is not: ValueError
但如果没有充分的理由,我真的不建议这样做......
几乎任何方式的“自动”行为都可以使用 python 描述符在对象属性上确定。最简单的描述符是property
:
class Foo(object):
@property
def bar(self):
try:
return self._bar
except AttributeError:
return "default value"
@bar.setter
def bar(self, value):
if isinstance(value, Baz): # for some other type "Baz"
self._bar = value
else:
raise ValueError("wrong type for attribute bar,"
" expected %r, got %r" % (Baz, type(value))