Python 打印列表中实例的属性(仅当其存在时)
我想打印一个类属性,它是实例列表的一部分,仅当该属性存在时才打印 我创建了一个类名Guitarist,它包括一个name属性和其他项(通常是一个字典,供用户添加额外的数据,如band、guitar等)。它将类添加到列表中(我希望我没有混淆术语) 我创建了另一个名为FenderGuitarst的类,它继承了Guitarst,并向构造函数添加了一个吉他属性。 如何更改print函数(它将吉他手列表作为一个参数),即仅当它标识一个吉他属性时,才会打印它? 注意:请忽略一个事实,即用户也可以将吉他属性添加到otherItems目录中Python 打印列表中实例的属性(仅当其存在时),python,python-3.x,class,object-oriented-database,inherited-constructors,Python,Python 3.x,Class,Object Oriented Database,Inherited Constructors,我想打印一个类属性,它是实例列表的一部分,仅当该属性存在时才打印 我创建了一个类名Guitarist,它包括一个name属性和其他项(通常是一个字典,供用户添加额外的数据,如band、guitar等)。它将类添加到列表中(我希望我没有混淆术语) 我创建了另一个名为FenderGuitarst的类,它继承了Guitarst,并向构造函数添加了一个吉他属性。 如何更改print函数(它将吉他手列表作为一个参数),即仅当它标识一个吉他属性时,才会打印它? 注意:请忽略一个事实,即用户也可以将吉他属性添
guitarists = []
class Guitarist:
playing_instrument = "guitar"
def __init__(self, name, otherItems=None):
self.name = name
self.otherItems = otherItems
guitarists.append(self)
def __str__(self):
return "Guitarist"
def get_playing_instrument(self):
return self.playing_instrument
def print_list(list):
for item in list:
print(f"name {item.name}", end="")
if item.otherItems is not None:
print(":")
for key,value in item.otherItems.items():
print(key, value)
print()
class FenderGuitarist(Guitarist):
def __init__(self, name, otherItems=None):
Guitarist.__init__(self, name, otherItems=None)
self.guitar = "Fender"
def __str__(self):
return "Fender Guitarist"
打印结果:列表中每个项目的名称、吉他(如果存在)和词典的其他项目
因此,对于这段代码,我希望print函数只将tommish项标识为具有吉他属性,然后将其打印出来。对于其他人,只需在otherItems字典中打印姓名和所有内容:
from classes import *
johnMayer = Guitarist("John Mayer", {"favorite guitar": "Fender/PRS"})
dictJimmy = {"band": "Led Zeppelin", "favorite guitar": "Gibson"}
jimmyPage = Guitarist("Jimmy Page", dictJimmy)
tomMisch = FenderGuitarist("Tom Misch")
print_list(guitarists)
有很多可能的解决方案。一个(黑客)解决方案是使用hasattr:
def print_list(list):
for item in list:
if not hasattr(item, 'guitar'):
continue
print(f"name {item.name}", end="")
if item.otherItems is not None:
print(":")
for key,value in item.otherItems.items():
print(key, value)
print()
我们在这里要做的是询问“此项
是否具有名为吉他
的属性?”如果没有,则继续循环的下一次迭代
如果这个解决方案不能解决问题,我很乐意与大家分享更多的解决方案。我对上面问题中的代码进行了一些编辑,因此现在挡泥板是构造函数的一部分,但不是作为输入 hasattr解决了这个问题。实际上,我只是想添加print_list函数,这样它将打印吉他属性(如果存在),并打印所有其他属性。因此,增加的内容是:
if hasattr(item, 'guitar'):
print(", guitar Fender")
因此,整个函数现在看起来如下所示:
def print_list(list):
for item in list:
print(f"name {item.name}", end="")
if hasattr(item, 'guitar'):
print(", guitar Fender")
if item.otherItems is not None:
print(":")
for key,value in item.otherItems.items():
print(key, value)
print()
可能更好。是的,
hasttr
肯定更好。我应该编辑发布的解决方案吗?我不确定这种情况下的标准礼仪是什么。你可以随时改变你的答案。如果评论指出改进或不足之处,您可以自由更改。有时,如果一条评论建议了一个我喜欢的备选方案,但答案已经被接受,我会添加该备选方案并保留原始方案。虽然该类没有添加到列表中,但该类的实例是。对的。如果这是你的意思,我已经更改了标题