1

値を属性に割り当てるときに、値の型を Python クラスで自動的にチェックするようにします。

enthought のtraitsモジュールがあり、IPython にはそのサブモジュールIPython.utils.traitletsとして純粋な python バージョンがあります。類似のモジュールはありますか? そのモジュールにこれらの属性を設定するための自動コマンドライン引数パーサーがある場合、それはより良いでしょう。

編集:スニペットをありがとう。しかし、私は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 に答える