我有一个很长的字符串,我想通过解析它并提取某些值来构建一个对象,但我不知道如何将字符串传递给我的类。我想将字符串传递给类,从我从字符串中提取的信息构建一个对象,然后将其返回。
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 :(得分:0)
我想你想要这样的东西:
$array = array_filter(explode("|", $ranGen));
答案 1 :(得分:0)
在你的班级声明中:
class Customer(stringWithInfo):
您指定stringWithInfo
作为基类。这可能不是你想要的。课程不参加论证,他们不是你打电话的功能(我暂时忽略了元类,因为它不是真正相关的,但如果你和#你可以查找它39;感兴趣)。
我想将字符串传递给类,从字符串中提取的信息构建一个对象,然后返回它。
最干净的解决方案通常只是编写一个单独的工厂函数或类。这是因为它将你的类所做的与你在字符串中表示它的方式以及你用来解析字符串的任何机制(正则表达式)分开。
在这里看起来你可以编写一个更通用的解析器来将你的字符串变成{' 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', ")