【问题标题】:Create Multiple Unique Classes Using Loops (Python)使用循环创建多个唯一类 (Python)
【发布时间】:2020-07-05 05:35:43
【问题描述】:

你好。我正在尝试使用循环创建对象的多个唯一实例。这是我的代码:

class Person: 
    def __init__(self, name, age, hobby, instrument):
        self.name = name
        self.age = age
        self.hobby = hobby
        self.instrument = instrument

    def printInfo(self): 
        print(f"Name: {self.name}\nAge: {self.age}\nHobby: {self.hobby}\nInstrument: {self.instrument}")  
        print() 

names = ["Adonis", "Michael", "George", "Towney", "Katrina", "Slestria", "Harry"]
ages = [17, 18, 16, 16, 17, 18, 16]
hobbies = ["Karate", "Music", "Knitting", "Programming", "Skiing", "Egging homes", "Doing magic"]
instruments = ["Alto saxophone", "Clarinet", "Oboe", "Trombone", "Flute", "Trumpet", "Percussion"]

而不必执行以下操作:

p1 = Person("Adonis", 17, "Karate", "Alto saxophone") 
p2 = Person("Michael", 18, "Music", "Clarinet") 
p3 = Person("George", 16, "Knitting", "Oboe") 
.
.
.

我想知道是否有更简单的方法。最后,我希望能够对所有对象执行此操作:

p3.printInfo() 

Name: George 
Age: 16 
Hobby: Knitting 
Instrument: Oboe 

我不知道这是否可能。我对类和对象还很陌生,因此非常感谢一些批评和正确的方向!

【问题讨论】:

    标签: python-3.x loops class object


    【解决方案1】:

    将人员分配给单个变量是一个糟糕的想法。您可以使用列表推导构建人员列表:

    persons = [Person(*info) for info in zip(names, ages, hobbies, instruments)]
    

    在这里,zip(...) 将您的四个列表组合成一个 4 元素元组列表。列表中的每个元组都作为四个单独的参数依次传递给构造函数(* 将四个项目的元组转换为四个参数)。

    persons[3].printInfo()
    #Name: Towney
    #Age: 16
    #Hobby: Programming
    #Instrument: Trombone
    

    【讨论】:

    • 好的,谢谢您的建议!如果您不介意,我还有一个问题:如果我想从所有列表中完全删除一个人怎么办?有没有办法我可以一举做到这一点,而不是删除其他列表中所有该人的相应索引?我的意思是:如果我想取出,比如说,乔治,而不是去:names.remove('George'),等等其他列表,我可以做一些更简单的事情吗?再次感谢!
    • 你能指导我在这种情况下如何做,让我有一个开始吗?
    【解决方案2】:

    您可以使用 zip 功能汇总每个人所需的所有数据,然后

    create class Person:
        def __init__(self, name, age, hobby, instrument):
            self.name = name
            self.age = age
            self.hobby = hobby
            self.instrument = instrument
    
        def printInfo(self):
            print(f"Name: {self.name}\nAge: {self.age}\nHobby: {self.hobby}\nInstrument: {self.instrument}")
            print()
    
    names = ["Adonis", "Michael", "George", "Towney", "Katrina", "Slestria", "Harry"]
    ages = [17, 18, 16, 16, 17, 18, 16]
    hobbies = ["Karate", "Music", "Knitting", "Programming", "Skiing", "Egging homes", "Doing magic"]
    instruments = ["Alto saxophone", "Clarinet", "Oboe", "Trombone", "Flute", "Trumpet", "Percussion"]
    
    counter = 1
    for name, age, hobbie, instrument  in zip(names, ages, hobbies, instruments):
        globals()["p{}".format(counter)] = Person(name , age, hobbie, instrument)
        counter += 1
    

    globals() 字典中的相关变量如下所示

    {'p1': <__main__.Person object at 0x02C8EE30>, 'p2': <__main__.Person object at 0x02C8EE70>, 'p3': <__main__.Person object at 0x02C8EEB0>, 'p4': <__main__.Person object at 0x02C8EEF0>, 'p5': <__main__.Person object at 0x02C8EF30>, 'p6': <__main__.Person object at 0x02C8EF70>, 'p7': <__main__.Person object at 0x02C8EFB0>}
    

    【讨论】:

      【解决方案3】:

      您可以使用人员列表创建一个 for 循环

      p1,p2,p3 =list
      all_list=[p1,p2,p3]
      
      for i in all_list :
          i=person()
      

      然后你可以运行方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-06
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        • 2020-05-03
        • 2014-03-03
        • 2015-12-11
        • 1970-01-01
        相关资源
        最近更新 更多