2016-08-17 5 views
-2

私のコードを見てみると、FileNodeを作成して文字列(filename)を渡しています。ファイル名セッターがトリガーされると残りのフィールドにデータが入力されますが、動作するようには見えません。pythonオブジェクトプロパティの値を変更しない

私は現在、 'ファイル名'設定ツール内でプロパティ '拡張子'の設定をテストしようとしていますが、プロパティを変更していないようです。なぜですか?

import os 
import pprint 

class FileNode(object): 
    def __init__(self, filename): 
     self.filename = filename 
     self.show = "" 
     self.episode = "" 
     self.sequence = "" 
     self.shot = "" 
     self.task = "" 
     self.version = "" 
     self.extension = "" 
     self.isValid = False 

    @property 
    def filename(self): 
     return self.filename 

    @property 
    def extension(self): 
     return self.extension 

    @filename.setter 
    def filename(self, value): 
     self._filename = value 

     fl, ex = os.path.splitext(value) 
     self._extension = "candles" 

    @extension.setter 
    def extension(self, value): 
     self._extension = value 



a = FileNode("BTMAN_1005_001_007_model_cup_v001.max") 
# print (vars(a)) 
pp = pprint.PrettyPrinter(depth=6) 
pp.pprint(vars(a)) 

b = FileNode("BTMAN_1005_001_007_model_v001.max") 
# print (vars(b)) 
pp = pprint.PrettyPrinter(depth=6) 
pp.pprint(vars(b)) 
+2

のように 'それは* *変更' extension'を行いますが、あなたはそれが設定され、属性のための単一のアンダースコアで始まる名前を使用してみてください。 – vaultah

+1

@JokerMartini私は有権者の一人ではありませんが、彼らはそれが打ち間違いのように見えるので、彼らはそれを保留にしていると思います。あなたがクラスを初期化するところでは、明示的に 'self.extension'を' '" ***に設定した後、あなたは '@ filename.setter'に拡張を設定しようとします。 '__init __()'の中で 'self.extension =" "'を 'self.filename = filename'の前に動かすと、意図した通りに動作します。 ''ろうそく ''を 'ex'に戻したいと思うでしょう。 –

+0

@JRichardSnapeはRichardに感謝します。私はむしろPythonの初心者ですので、それは私にとって初めての他の人にとってはシンプルに見えるかもしれません。 – JokerMartini

答えて

3

プロパティの属性は属性と同じです!

は「`__init__``の最後にある」

... 
def __init__(self, ...): 
    ... 
    self._extension = "" 
    ... 
... 
@property 
def extension(self): 
    return self._extension 
... 
+0

これも変わらない、私はまだ同じ問題があります。 – JokerMartini

関連する問題