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

2024-05-14 05:39:41 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我正在处理的一个项目,我需要将一个字符串(它有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)

所以我想我在这个上下文中遇到的问题是,我怎样才能把一个字符串转换成一个类呢?你知道吗


Tags: 项目字符串nameidagefacebookcurrentprofile
2条回答

您错误地使用了。你有一个类,一个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')

麦克斯诺的答案可能就是你想要的,但不管怎样。。。你知道吗

如果你真的,真的想从字符串序列中建立一个类(例如,从字符串本身提取变量名),那么你可能想看看元类。你知道吗

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

相关问题 更多 >