9

たとえば、次のコードでは、getName 関数の利点は何ですか?

class Node(object):
    def __init__(self, name):
        self.name = str(name)
    def getName(self):
        return self.name
    def __str__(self):
        return self.name
4

4 に答える 4

20

メリットはありません。他の言語 (Java など) から Python に移行する人は、慣れているため、これを行うことがあります。Python では、基になる変数を直接取得して設定する以外に何もしない、この種のゲッターとセッターを作成しても意味がありません。 プロパティを使用すると、後で値を取得/設定するだけでなく、より複雑なことを行う必要がある場合に、ロジックを透過的に交換できます。

ゲッター/セッターを使用することには利点がありますが、Python では、属性を直接取得/設定する代わりに、単純なゲッター/セッターを使用する本当の理由はありません。私が考えることができる唯一の理由は、特定のメソッド セットを使用できるようにする必要がある既存の API との互換性を維持する必要がある場合です。

于 2012-12-13T03:14:52.683 に答える
3

クラス属性に直接アクセスするだけで、getter を使用しないでください。通常、ゲッターはプライベート/保護された属性にアクセスするために使用されますが、Python ではそのようなことはありません。ゲッターを使用するもう 1 つの理由は、値を返す前にいくつかの作業を行うことができるようにすることです。あなたの場合はそうではありませんが、将来変更される可能性があります。その時が来たら、propertyデコレータを使い始めるだけです。

@property
def name(self):
    return self._name

直接アクセスするのと同じように、このようにmyObject.nameアクセスします。

于 2012-12-13T03:27:31.787 に答える
2

プロダクション コードでは@property. しかし、あなたが尋ねたので、私はそこに何かを投げます.

おそらく、プログラマーは のサブクラスを作成し、特別な作業を行うNodeためにオーバーライドする方が簡単 (または少なくともより明示的) であると考えるでしょう。getNameちょっとした考え!

しかし、一般的に、他の人が言ったように、それは一般的に見られるものではありません.

于 2012-12-13T03:17:35.550 に答える
1

ありません。これらは Python では不要であり、広く推奨されています。

于 2012-12-13T03:14:53.563 に答える