2016-08-17 30 views
-2

如果你看看我的代码,我创建一个FileNode并将它传递给字符串(文件名)。当文件名设置器被触发时,它应该填充剩余的字段,但它看起来不起作用。设置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',但是你把它设置成'“”'在__init__'的'结束。 – vaultah

+1

@JokerMartini我不是选民之一,但我想他们是搁置,因为它似乎是一个错字。在你初始化类的地方 - 你试图在'@ filename.setter'中设置扩展名后,你明确地将'self.extension'设置为'“”***。如果你在'__init __()'''self.filename = filename'之前移动self.extension =“”',它将按照我的设想工作。我想你也想把''蜡烛''改回''ex'。 –

+0

@JRichardSnape谢谢理查德。我对Python非常陌生,所以对于其他人来说对我来说可能很简单。所以谢谢你解释 – JokerMartini

回答

3

您的属性与属性名称相同!

尝试使用与属性的单下划线开头的名字,如

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

这也不会改变它,我仍然有同样的问题。 – JokerMartini