从字符串生成对象

Mih*_* L. 0 python string variables object

我有一个字符串列表,每个字符串代表书籍和他们的一些属性,例如

# each book followed by the price and the name of the genre
book_names = ['love 3 romance',
              'rose 6 drama',
              'flower 7 nice_story']
Run Code Online (Sandbox Code Playgroud)

我想以某种方式为每本书创建一个新对象,并使其字符串描述属性的其他部分.

这是我尝试过的(显然,它不起作用):

class Book_Class():
  price=0
  genre=''
  book_content=[]

for i in book_names:
  name=i.split()[0]
  name=Book_Class()
  name.price=i.split()[1]
  name.genre=i.split()[2]
Run Code Online (Sandbox Code Playgroud)

也许有一种简单的方法来实现我所追求的目标(请告诉我,因为我对编程很新...).

Mar*_*ers 7

有几种方法:

  1. 使用字典,在很多情况下绰绰有余:

    keys = ['name', 'price', 'gender']
    book = { k: v for k, v in zip(keys, i.split()) }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 给你的Book班级一个有意义的__init__初始化者:

    class Book(object):
        name = ''
        price = 0
        gender = None
    
        def __init__(self, name, price, gender):
            self.name = name
            self.price = price
            self.gender = gender
    
    Run Code Online (Sandbox Code Playgroud)

    并将解析后的值传递给:

    Book(*i.split())
    
    Run Code Online (Sandbox Code Playgroud)
  3. 作为最后的手段,您可以使用setattr在现有对象上设置任意属性:

    book = Book()
    for attr, value in zip(keys, i.split()):
        setattr(book, attr, value)
    
    Run Code Online (Sandbox Code Playgroud)