2012-02-29 9 views
0

これはPythonで可能ですか?'プロパティ'をPythonクラスのメソッドの名前として使用

class MyClass(object): 
    @property 
    def property(self): 
     return self._property 

つまり、「プロパティ」という名前のプロパティが必要です。実際に正常に動作しますが、Eclipseでは警告が表示されます。私は組み込みの@propertyデコレータが、クラス内のメソッドやプロパティとは異なる名前空間に存在すると考えました。

組み込みのデコレータの名前を関連するモジュールのスコープ内で変更することはできますか?この警告を受け取らずに名前 'プロパティ'を使用できますか?たぶん、次のようなもの:私はこれを行うが、私はグローバル@propertyデコレータビルトインが、名前「プロパティが」まだある有効な方法のエイリアスを作成したので、私はまだ、警告を受ける

attr = property 

class MyClass(object): 
    @attr 
    def property(self): 
     return self._property 

それを参照してください。

アイデア?

答えて

3

以下れるプロパティpropertyに名前を付けると問題:あなたはクラス定義で名前propertyを影にしましたので、

class Foo(object): 
    @property 
    def property(self): 
     return "ham" 

    @property 
    def other_property(self): 
     return "spam" 

第二の特性を定義することはできません。

あなたの例のようにpropertyを "名前を変更"することで回避できますが、私の場合は、このように組み込み関数を混乱させることはありません。それはあなたのコードを続行するのを難しくします。

+0

それだけではないことのように、定義することができます。 –

+0

@ IgnacioVazquez-Abrams:はい、OPの回避策がこのトリックを行います。それを答えに加えました。 –

+0

@larsmans、私はすでにあなたの問題に気づき、私はクラスの最後のプロパティとして自分の "defプロパティ"を宣言することによってそれを解決しました。それは実際にトリックを実行し、それが実行されます。それはちょうど私を悩ます日食の警告です。私はスクリプトを実行するときに警告しません。 – Ernesto

1

デコレータは通常の関数なので、他の関数と同じ名前空間に存在します。実際にはproperty関数は内部クラスFooです。しかし、それは、それが最初にデコレータ名を探す場所であることがわかります。したがって、矛盾があります。

次のコードはコンパイルという事実から、これを見ることができます:

class Foo(object): 

    def decfun(x): return "ham" 

    @decfun 
    def second(self, y): pass 
関連する問題