1

我希望我的 Python 类在将值分配给属性时自动检查值的类型。

有 enthought 的traits模块,IPython 有一个纯 python 版本作为其子模块IPython.utils.traitlets。有没有类似的模块?如果该模块具有自动命令行参数解析器来设置这些属性,那就更好了。

编辑:感谢您的片段。但我想要 Python。如果有库可以做到这一点,我不想自己重新实现。

4

2 回答 2

2

我不知道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

但如果没有充分的理由,我真的不建议这样做......

于 2012-04-28T00:56:05.490 回答
1

几乎任何方式的“自动”行为都可以使用 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))
于 2012-04-28T01:12:49.303 回答