如何在字典中包含 class 中的实例列表?
How to include a list of instances from a class in a dictionary?
我创建了一个具有以下属性、方法和实例的自定义 class:
class wizard:
def __init__(self, first, last, pet, petname, patronus):
self.first = first
self.last = last
self.pet = pet
self.petname = petname
self.patronus = patronus
# Methods
def fullname(self):
return '{} {}'.format(wizard1.first, wizard1.last)
def tell_pet(self):
return '{} {}{} {} {} {}'.format(wizard1.first, wizard1.last,'\'s', wizard1.pet, 'is called', wizard1.petname)
def expecto_patronum(self):
return '{} {} {}'.format('A', wizard1.patronus, "appears!")
# Instances
harry = wizard('Harry', 'Potter', 'Owl', 'Hedwig', 'Stag')
ron = wizard('Ron', 'Weasley', 'Owl', 'Pigwidgeon', 'Dog')
hermione = wizard('Hermione', 'Granger', 'Cat', 'Crookshanks', 'Otter')
malfoy = wizard('Draco', 'Malfoy', 'Owl', 'Niffler', 'Dragon')
现在我想创建一个字典来存储 class 向导的实例。
hogwarts = {harry, ron, hermione, malfoy}
但是,我得到的输出如下:
{<__main__.wizard object at 0x7fa2564d6898>,
<__main__.wizard object at 0x7fa2564d61d0>,
<__main__.wizard object at 0x7fa2564d6dd8>,
<__main__.wizard object at 0x7fa2564bf7f0>}
相反,我希望字典打印出存储在实例中的信息。
我该怎么做?
您可以将 __repr__
或 __str__
方法放在 class 中,并使其成为 return 您在打印对象时想要打印的内容。
例如:
def __repr__(self):
return f'I am {self.first} {self.last}. I have a pet {self.pet}, its name is {self.petname}. My patronus is {self.patronus}.'
为您的 class 函数添加表示。
def __repr__(self):
print(f"First : {self.first }, Last : {self.last} ....")
您需要使用 self
才能使用您的 class 属性。
class wizard:
def __init__(self, first, last, pet, petname, patronus):
self.first = first
self.last = last
self.pet = pet
self.petname = petname
self.patronus = patronus
# Methods
def fullname(self):
return '{} {}'.format(self.first, self.last)
def tell_pet(self):
return '{} {}{} {} {} {}'.format(self.first, self.last,'\'s', self.pet, 'is called', self.petname)
def expecto_patronum(self):
return '{} {} {}'.format('A', self.patronus, "appears!")
你的字典实际上是set
。您可以将您的实例放在 list
中并遍历它以打印您认为合适的值,如下所示:
hogwarts = [harry, ron, hermione, malfoy]
for student in hogwarts:
print('{}, {}, {}'.format(student.fullname(), student.tell_pet(), student.expecto_patronus()))
我创建了一个具有以下属性、方法和实例的自定义 class:
class wizard:
def __init__(self, first, last, pet, petname, patronus):
self.first = first
self.last = last
self.pet = pet
self.petname = petname
self.patronus = patronus
# Methods
def fullname(self):
return '{} {}'.format(wizard1.first, wizard1.last)
def tell_pet(self):
return '{} {}{} {} {} {}'.format(wizard1.first, wizard1.last,'\'s', wizard1.pet, 'is called', wizard1.petname)
def expecto_patronum(self):
return '{} {} {}'.format('A', wizard1.patronus, "appears!")
# Instances
harry = wizard('Harry', 'Potter', 'Owl', 'Hedwig', 'Stag')
ron = wizard('Ron', 'Weasley', 'Owl', 'Pigwidgeon', 'Dog')
hermione = wizard('Hermione', 'Granger', 'Cat', 'Crookshanks', 'Otter')
malfoy = wizard('Draco', 'Malfoy', 'Owl', 'Niffler', 'Dragon')
现在我想创建一个字典来存储 class 向导的实例。
hogwarts = {harry, ron, hermione, malfoy}
但是,我得到的输出如下:
{<__main__.wizard object at 0x7fa2564d6898>,
<__main__.wizard object at 0x7fa2564d61d0>,
<__main__.wizard object at 0x7fa2564d6dd8>,
<__main__.wizard object at 0x7fa2564bf7f0>}
相反,我希望字典打印出存储在实例中的信息。 我该怎么做?
您可以将 __repr__
或 __str__
方法放在 class 中,并使其成为 return 您在打印对象时想要打印的内容。
例如:
def __repr__(self):
return f'I am {self.first} {self.last}. I have a pet {self.pet}, its name is {self.petname}. My patronus is {self.patronus}.'
为您的 class 函数添加表示。
def __repr__(self):
print(f"First : {self.first }, Last : {self.last} ....")
您需要使用 self
才能使用您的 class 属性。
class wizard:
def __init__(self, first, last, pet, petname, patronus):
self.first = first
self.last = last
self.pet = pet
self.petname = petname
self.patronus = patronus
# Methods
def fullname(self):
return '{} {}'.format(self.first, self.last)
def tell_pet(self):
return '{} {}{} {} {} {}'.format(self.first, self.last,'\'s', self.pet, 'is called', self.petname)
def expecto_patronum(self):
return '{} {} {}'.format('A', self.patronus, "appears!")
你的字典实际上是set
。您可以将您的实例放在 list
中并遍历它以打印您认为合适的值,如下所示:
hogwarts = [harry, ron, hermione, malfoy]
for student in hogwarts:
print('{}, {}, {}'.format(student.fullname(), student.tell_pet(), student.expecto_patronus()))