2011-11-28 2 views
20

object.get_this()object.set_that(value)のようなゲッター/セッターメソッドを使ってオブジェクト属性にアクセスするはずです。このコードはクラス内でも定義されているメソッドを保持していますか?または、オブジェクトインスタンスでのみ使用されることを意味します。例えば、それはget_value()OOP:getter/setterメソッド

class test: 
    def __init__(self,value): 
     self.value = value 
    def get_value(self): 
     return self.value 
    def method(self): 
     return some_operation(self.value) 

は、オブジェクトのインスタンスの valueにアクセスするために定義された、または get_value()もクラスメソッド内で使用する必要があり、それをこのように行うことが慣用のですか?

class test: 
    def __init__(self,value): 
     self.value = value 
    def get_value(self): 
     return self.value 
    def method(self): 
     return some_operation(self.get_value()) 
+4

「プロパティ」組み込み関数を確認してください:http://docs.python.org/library/functions.html#property – eumiro

+3

これを読んだ場所はわかりませんが、私はそれを賭けますどのPythonの文脈にもありませんでした。 Pythonでは、その逆が真です。 –

答えて

46

python do not use getter/setter methods。属性自体にアクセスするだけでなく、属性にアクセスまたは設定するたびにコードを実行する必要がある場合は、propertiesを使用してください。

+19

+1その理由:[PythonはJavaではない](http://dirtsimple.org/2004/12/python-is-not-java.html) – Tadeck

+5

+1 @Tadeck非常に重要なこと "PythonはそうではありませんJava " – BlaShadow

2

私は、オブジェクトのメソッド内のオブジェクトの属性に、他のオブジェクトからのメソッドがそれらにアクセスすると予想するものとは異なる方法でアクセスしません。どうして?私は確信していない、それはちょうど非常に変わったようだ。

properties decoratorを使用すると、get_foo/set_fooのようなゲッタ/セッタが不要になります。

関連する問題