4

この質問はスタイルの問題です。属性はPythonではプライベートではないため、次のようなものを使用してクラスの外部で直接アドレス指定することは適切で一般的な方法my_obj.attrですか? それとも、get_attr()C ++で通常行われているように、メンバー関数を介して行う方がよいのでしょうか?

4

3 に答える 3

12

プロパティを使用したいようです:

class Foo(object):
    def __init__(self, m):
        self._m = m
    @property
    def m(self):
        print 'accessed attribute'
        return self._m
    @m.setter
    def m(self, m):
        print 'setting attribute'
        self._m = m


>>> f = Foo(m=5)
>>> f.m = 6
setting attribute
>>> f.m
accessed attribute
6

これは、変数にアクセスするための最も適応的な方法です。単純なユース ケースでは、これを行う必要はありません。また、Python では、後でいつでもプロパティを使用するように設計を変更できます。費用はかかりません。

于 2013-06-06T08:50:04.900 に答える
2

最初にクラスのインスタンスを作成します。

myinstance = MyClass()
myinstance.attr

そうしないAttributeError: class MyClass has no attribute 'attr'と、やろうとしたときのようなエラーが発生しますMyClass.attr

于 2013-06-06T08:48:41.697 に答える
0

はい、それは一般的な方法です。属性の取得方法をより詳細に制御する必要がある場合は、__getattribute__and/orの使用を検討して__getattr__ください。

于 2013-06-06T08:54:26.957 に答える