2016-11-22 51 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

相关问题