1

Python クラスのインスタンス変数にどのようにアクセスすればよいのか疑問に思っていました。すべてのインスタンス変数に対してメソッドを作成する必要がありますか、それとも直接アクセスする必要がありますか?

次に例を示します。

class Example(object):

    def __init__(self):
        self.x = 5

    def getX(self):
        return self.x

    def addYtoX(self, y):
        return self.x + y # OR: return self.getX() + y

ありがとうございました!

4

3 に答える 3

7

ほとんどの場合、それらに直接アクセスするだけです。PythonはJavaではありません

class Example(object):
    def __init__(self):
        self.x = 5

    def addYtoX(self, y):
        return self.x + y

Java では、後から気が変わってパブリック フィールドをゲッターとセッターに変更できないため、ゲッターとセッターを使用する必要があります。Python ではできるので、実際に必要になるまでゲッターとセッターを使用しないでください。次に、property代わりに a に切り替えます。

于 2012-12-01T17:57:24.723 に答える
1

なんらかの形式のチェックを提供する理由がない場合、Python では値を直接追加/削除/設定できます。

class A(object):
    def __init__(self):
        self.some_var = 5

a = A()
a.other_var = 6

print a.some_var
a.some_var = 123456
del a.some_var

等...

それ以外の場合は、セッター/ゲッターを使用できます (ただし、設計が正当化される場合のみ)。

class A(object):
    def __init__(self):
         self._some_var = 5 # note the _
    @property
    def some_var(self):
        return self._some_var

    @some_var.setter
    def some_var(self, val):
        if val > 5:
            self._some_var = val
        else:
            print 'Nope - can not do that!'
于 2012-12-01T18:03:59.057 に答える
0

シンプルに保ち、x直接アクセスするだけです。後で、カプセル化、型/値チェックなどを行う必要があると判断した場合は、それをプロパティ属性xに変換できます。これにより、get/setメソッドを変更せずに定義できます。既存のクライアントコード。

于 2012-12-01T18:16:36.260 に答える