16

Python で読み取り専用プロパティを持つクラスを定義しようとしています。Python のドキュメントに従って、次のコードを思いつきました。

#!/usr/bin/python

class Test:
        def __init__(self, init_str):
                self._prop = init_str

        @property
        def prop(self):
                return self._prop

t = Test("Init")
print t.prop
t.prop = "Re-Init"
print t.prop

エラー/例外が予想されますが、コードを実行しようとすると、正常に実行されることがわかります。

$ ./python_prop_test 
Init
Re-Init

私の Python バージョンは 2.7.2 です。私が見ているものは期待されていますか? プロパティが設定できないことを確認するにはどうすればよいですか?

4

2 に答える 2

24

これが期待どおりに機能Testするには、新しいスタイルのクラスである必要があります。

class Test(object):
          ^^^^^^^^

これは、次のドキュメントでproperty()示唆されています。

新しいスタイルのクラス( から派生したクラス)のプロパティ属性を返しますobject

Test新しいスタイルのクラスになり、変更しようとすると、prop例外が発生します。

In [28]: t.prop='Re-Init'

AttributeError: can't set attribute
于 2013-03-17T07:52:36.847 に答える
4

プロパティを使用するには、新しいスタイルのクラスを使用する必要があります。Python 2 で新しいスタイルのクラスを使用するには、から継承する必要がありますobject。クラス定義を に変更しますclass Test(object)

于 2013-03-17T07:52:53.550 に答える