用于静态类型类属性的Python模块
我希望我的Python类在将值分配给属性时自动检查值的类型 有一个Enthound的模块,IPython有一个纯python版本作为它的子模块。有类似的模块吗?若那个模块有自动命令行参数解析器来设置这些属性,那个就更好了用于静态类型类属性的Python模块,python,static-typing,Python,Static Typing,我希望我的Python类在将值分配给属性时自动检查值的类型 有一个Enthound的模块,IPython有一个纯python版本作为它的子模块。有类似的模块吗?若那个模块有自动命令行参数解析器来设置这些属性,那个就更好了 编辑:感谢您的片段。但是我想要Python库。如果有库可以做到这一点,我不想自己重新实现。我不知道特性。。。但是,如果要在指定对象时检查对象的类型,可以覆盖\uuuu setattr\uuuu以检查 class MyClass(object): def __setattr
编辑:感谢您的片段。但是我想要Python库。如果有库可以做到这一点,我不想自己重新实现。我不知道
特性。。。但是,如果要在指定对象时检查对象的类型,可以覆盖\uuuu setattr\uuuu
以检查
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描述符在对象属性上确定。最简单的描述符是属性
:
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))
为什么要为动态类型语言使用静态类型变量?定义自动检查。你可以随时使用该类型。如果你关心静态类型,那你使用的是错误的语言。我只是再次遇到了这个问题,并对自己说,“这是属性
的最佳位置。”。我本来想把它加到我的答案里,但结果证明你已经做到了+1.