在Python中将字符串转换为类(反之亦然)

时间:2015-11-19 23:10:17

标签: python string class backend

对于我正在处理的项目,我需要将一个字符串(具有ID号(即ID_00000001 ... ID_00002032或类似的东西))转换为一个类。 我的意思是,已经存储了一个具有如下值的类:

class ID_00000001:
  name = 'Robert Johnson'
  age = 193
  facebook_url = 'facebook.com/Robert_johnson'
  etc.

我想这样做,以便我可以将此个人资料与其他人进行比较。我想这样做的方式是比较像(psudo):

这样的值
current_profile_str = 'ID_00000001'
for i in range(len(all_IDs)):
  matches = []
  num = *converts number into 8 digit str*
  cycle_profile_str = 'ID_' + num
  *convert current_profile and cycle_profile to class*
  if (current_profile.age == cycle_profile.age):
      matches.append(cycle_profile_str)

所以我想在这种情况下我的问题是,我如何能够将字符串转换为类?

2 个答案:

答案 0 :(得分:1)

您错误地使用。你有一个类,一个facebook用户。 这看起来像这样:

class FacebookUser():
    def __init__(self, id, name, age, url):
        self.id = id
        self.name = name
        self.age = age
        self.url = url

然后,您可以为每个用户创建实例

user1 = FacebookUser(1, 'John Doe', 27, 'facebook.com/john_doe')
user2 = FacebookUser(3, 'Jane Doe', 92, 'facebook.com/jane_doe')

print(user1.age == user2.age)

要将类表示为字符串,可以将__repr__魔术函数添加到类中:

class FacebookUser():
    def __init__(self, id, name, age, url):
        self.id = id
        self.name = name
        self.age = age
        self.url = url

    def __repr__(self):
        return 'FacebookUser(id: {:08d}, name: {}, age: {})'.format(
             self.id,
             self.name,
             self.age,
        )

这将导致

>>> print(user1)
FacebookUser(id: 00000001, name: John Doe, age: 27)

换句话说,您将使用替代构造函数 一种类方法。这些是属于类的方法,而不属于实例。 这些函数中的第一个参数是类cls,而不是实例self

class FacebookUser():
    def __init__(self, id, name, age, url):
        self.id = id
        self.name = name
        self.age = age
        self.url = url

    def __repr__(self):
        return 'FacebookUser(id: {:08d}, name: {}, age: {})'.format(
            self.id,
            self.name,
            self.age,
        )

    @classmethod
    def from_string(cls, string):
        '''
        Create a new instance from a string with format
        "id,name,age,url"
        '''
        _id, name, age, url = string.split(',')
        return cls(int(_id), name, int(age), url)

user1 = FacebookUser.from_string('1,John Doe,27,facebook.com/john_doe')

答案 1 :(得分:0)

MaxNoe的回答可能就是您正在寻找的,但无论如何...

如果你真的,实际上想要以某种方式从一系列字符串构建一个类(例如,为了让变量的名字从字符串本身中提取出来,那么你可能想要查看元类。

http://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/