2016-11-22 86 views
0

我有一個很長的字符串,我想通過解析並抽出某些值來創建對象,但我不確定如何傳遞字符串我的班級。我想將字符串傳遞給類,從我從字符串中提取的信息構建一個對象,然後將其返回。如何將字符串傳遞給Python中的對象類

class Customer(stringWithInfo): 

     def __init__(self, name, email, number): 

     self.name = name 
     self.email = email 
     self.number = number 

    def getName(self, name): 

     name = re.search("'name': '(.+?)',",stringWithInfo).group(1) 
     return self.name 

    def getEmail(self, email): 

     email = re.search("'email': '(.+?)',",stringWithInfo).group(1) 
     return self.email 

    def getName(self, number): 

     number = re.search("'number': '(.+?)',",stringWithInfo).group(1) 
     return self.number 
+0

,你把「stringWithInfo」是該對象的超類的地方。如果你想添加2種方法來初始化/創建對象,你可以使用* args參數。 – ProgramFast

+1

我建議你嘗試解析對象創建之外的字符串,並在之後傳遞值。就目前而言,創建對象的唯一方法是傳入一個長字符串。 – chatton

回答

0

我想你想是這樣的:

class Customer(object): 

     def __init__(self, stringWithInfo): 
     self.name = re.search("'name': (.+?)',",stringWithInfo).group(1) 
     self.email = re.search("'email': (.+?)',",stringWithInfo).group(1) 
     self.number = re.search("'number': '(.+?)',",stringWithInfo).group(1) 

    def getName(self, name): 
     return self.name 

    def getEmail(self, email): 
     return self.email 

    def getNumber(self, number): 
     return self.number 
0

在你的類聲明:

class Customer(stringWithInfo): 

你指定stringWithInfo作爲基類。這可能不是你想要的。類沒有參數,它們不是你調用的函數(我暫時忽略了元類,因爲它不是真正相關的,但如果你感興趣的話可以查看它)。


我想字符串傳遞給類,建立從我從字符串拉動信息的對象,然後返回。

最乾淨的解決方案通常只是編寫一個單獨的工廠函數或類。這是因爲它將你的類與你在字符串中表示的方式以及你用來解析字符串的任何機器(正則表達式)分開。

在這裏看起來你可以寫一個更通用的解析器來將你的字符串變成{'name':'value'}字典,然後你的工廠函數變得微不足道。

但是,如果您更喜歡保持這一切都在同一個班,你可以用靜態方法:

class Customer(object): 
    def __init__(self, name, email, number): 
     self.name = name 
     self.email = email 
     self.number = number 

    @staticmethod 
    def fromString(s): 
     name = Customer.parseName(s) 
     email = Customer.parseEmail(s) 
     number = Customer.parseNumber(s) 
     return Customer(name, email, number) 

    @staticmethod 
    def parseName(s): 
     m = re.search("'name': '(.+?)',",s) 
     return m.group(1) 

    @staticmethod 
    def parseEmail(s): 
     m = re.search("'email': '(.+?)',",s) 
     return m.group(1) 

    @staticmethod 
    def parseNumber(s): 
     m = re.search("'number': '(.+?)',",s) 
     return m.group(1) 

(請注意您的工廠方法必須是靜態的,如果你堅持他們將在你的班級,因爲你還沒有一個實例可以打電話給他們)。

你會使用它像:

c = Customer.fromString("'name': 'bob', 'number': '1', 'email': 'nope', ") 
+0

所以如果我要走這條路線,我該如何通過長字符串來解析? 'c = Customer.fromString(MylongString)' – WeVie

相關問題