2017-03-03 173 views
0

我想設置一個對象屬性等於其他屬性的組合。設置一個對象的屬性等於其他屬性Python

class poly_Uservar(object): 
def __init__(self): 
    self.long1 = 0 
    self.long2 = 0 
    self.long3 = 0 
    self.long4 = 0 
    self.x = 0 
    self.command = '' 
    self.formats = self.long1,self.long2,self.long3,self.long4 
def setUservars(self): 
    for self.x in range (0,50): 
     decim1 = float(.07)*float(self.x) 
     decim2 = float(.07)*float(self.x+1) 
     self.long1 = float(float(10.00000) + float(decim1)) 
     self.long2 = float(float(10.00000) + decim2) 
     self.long3 = float(self.long1 +.030000) 
     self.long4 = float(self.long3 +.020000) 
     cmd = self.command % self.formats 
     print cmd 

     time.sleep(.2) 
def main(): 
    type= raw_input('Enter type') 
    Uservar = poly_Uservar() 
    if type == '3': 
     Uservar.command = 'Uservar[%i]: 10.07000 %f 10.01000 %f 9.93000 %f\r' 
     Uservar.formats = Uservar.x,Uservar.long1,Uservar.long2,Uservar.long1 
     Uservar.setUservar() 
    if type == '4': 
     Uservar.command = 'Uservar[%i]: 10.07000 %f 10.01000 %f 9.93000 %f 9.93000 %f\r' 
     Uservar.formats = Uservar.x,Uservar.long1,Uservar.long2,Uservar.long2,Uservar.long1 
     Uservar.setUservar() 

我遇到的問題是,我的格式atrribute沒有更新到其他屬性,因爲它們被設置。而且我不能在for循環中重新分配它們,因爲取決於用戶輸入,格式會發生變化。所以cmd總是打印出其他屬性的初始化內容。有沒有辦法強制我的代碼更新我的格式屬性,因爲他們改變我的方法? 感謝advace!

+0

我想知道是否需要以某種方式將命令設置爲列表?然後我可以迭代列表? – vburns

回答

0

好吧我最終想出了一個可行的解決方案。然而,這並不是非常「pythonic」,所以如果有人有更好的方式來做這件事,我仍然很想看到:)無論如何,這是我最終做的。

class poly_Uservar(object): 
    def __init__(self): 
     self.long1 = 0 
     self.long2 = 0 
     self.long3 = 0 
     self.long4 = 0 
     self.command = '' 
     self.formats = [1,2,3] 

def setUservars(self): 
    for self.x in range (0,50): 
     for x in range (0,50): 
      decim1 = float(.07)*float(x) 
      decim2 = float(.07)*float(x+1) 
      self.long1 = float(float(10.00000) + float(decim1)) 
      self.long2 = float(float(10.00000) + decim2) 
      self.long3= float(self.long1 +.030000) 
      self.long4= float(self.long3 +.020000) 
      vals = [self.long1, self.long2, self.long3, self.long4] 
      cmd_args = [x] 
      for i in range (0, len(self.formats)): 
       cmd_args.append(vals[self.formats[i]-1]) 
      cmd = self.command % tuple(cmd_args)    
      print cmd 
def main(): 
    type= raw_input('Enter type') 
    Uservar = poly_Uservar() 
    if type == '3': 
     Uservar.command = ':Uservar[%i] 10.07000 %f 10.01000 %f 9.93000 %f\r' 
     Uservar.formats = [1,2,1] 
     Uservar.setUservar()  
相關問題