2017-03-31 8 views
0

用として、私は、変数(intstringlist)を持つクラスを持っています。そして、変数の値を取得するために@propertyを使用したい、この変数に値を設定するためのsetterを使用したいと思います。私はintstring変数のためではなくlistために、この概念を実装することができます。私もリストのためにそれを実装するのを手伝ってください。Pythonのプロパティとセッターint型と文字列

class MyClass: 

    def __init__(self): 
     self._a = 1 
     self._b = 'hello' 
     self._c = [1, 2, 3] 

    @property 
    def a(self): 
     print(self._a) 

    @a.setter 
    def a(self, a): 
     self._a = a 

    @property 
    def b(self): 
     print(self._b) 

    @b.setter 
    def b(self, b): 
     self._b = b 


my = MyClass() 

my.a 
# Output: 1 
my.a = 2 
my.a 
# Output: 2 

my.b 
# Output: hello 
my.b = 'world' 
my.b 
# Output: world 


# Need to implement: 
my.c 
# Output: [1, 2, 3] 
my.c = [4, 5, 6] 
my.c 
# Output: [4, 5, 6] 
my.c[0] = 0 
my.c 
# Output: [0, 5, 6] 
my.c[0] 
# Output: 0 

私は同様の質問を発見したが、リストのためのオペレーションを呼び出し、このようにint型と文字列とは異なりますので、彼らは、私のために合わない:

+0

あなたは([最小、完全、かつ検証]にこれをダウントリミングすることができhttp://stackoverflow.com/ help/mcve)の例です。そうすれば、私たちがあなたを助けやすくなります。 –

+0

@ stephen-rauchありがとうございました。私は誤ってメモ帳からコードを2回コピーしました。私は自分のコードの複製を削除しました。 –

+1

なぜプロパティを返すのではなく値を出力するのですか?そしてなぜあなたは財産を持っているのですか? Pythonがプロパティを持っているので、ゲッターやセッターが必要ないと言っている人は、プロパティをどこにでも使うはずはありません。それはあなたが普通の属性を使うことになっていることを意味し、属性を取得したり設定したりするためにいくつかのロジックを付ける必要があると判明した場合、*あなたは 'property'を持ち込みます。 – user2357112

答えて

0

私はあなたの誤解AND演算は、Pythonですべてがオブジェクトであることを実現していないから生じます。 liststringまたはintの間に違いはありません。 intstringための実装には違いがいくつかの名前を除いて、存在しないことに注意してください。

私は、単一のプロパティを使用しての例を作り直し、それがすべての場合に動作することを確認するためにそれにあなたのユースケースのすべてを割り当てました。

コード:

class MyClass: 
    def __init__(self): 
     self.my_prop = None 

    @property 
    def my_prop(self): 
     return self._my_prop 

    @my_prop.setter 
    def my_prop(self, my_prop): 
     self._my_prop = my_prop 

テストコード:

my = MyClass() 

my.my_prop = 1 
assert 1 == my.my_prop 
my.my_prop = 2 
assert 2 == my.my_prop 

my.my_prop = 'hello' 
assert 'hello' == my.my_prop 
my.my_prop = 'world' 
assert 'world' == my.my_prop 

my.my_prop = [1, 2, 3] 
assert [1, 2, 3] == my.my_prop 
my.my_prop = [4, 5, 6] 
assert [4, 5, 6] == my.my_prop 
my.my_prop[0] = 0 
assert [0, 5, 6] == my.my_prop 
assert 0 == my.my_prop[0] 
関連する問題