我是Python新手。我使用的是Python v2.7。
我定义了一个简单的类Product
:
class Product:
def __init__(self, price, height, width):
self.price = price
self.height = height
self.width = width
然后,我创建了一个列表,然后附加了一个Product
对象:
# empty list
prod_list = []
# append a product to the list, all properties have value 3
prod1 = Product(3,3,3)
prod_list.append(prod1)
然后,我创建了另一个Product
对象,该对象设置了相同的初始值(全部为3):
prod2 = Product(3,3,3)
然后,我想检查prod_list
是否包含价格= 3,宽度= 3&的Product
对象。身高= 3,由:
if prod2 not in prod_list:
print("no product in list has price=3, width=3 & height=3")
我希望没有打印输出消息,但会打印出来。在Python中,如何检查列表是否没有具有某些属性值的对象呢?
答案 0 :(得分:7)
您需要为对象添加let verticalSpace = NSLayoutConstraint(item: image, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1, constant: 0)
view.addConstraint(verticalSpace) // this works
属性。为了获取对象属性,您可以将属性名称传递给equality
,后者返回获取属性的元组,然后您可以比较元组。您还可以使用operator.attrgetter
属性,它将模块的命名空间作为字典对象。然后,您可以获取要根据它们比较对象的属性名称。
__dict__
编辑:
正如@Ashwini在评论中提到的基于python wiki:
比较运营商之间没有隐含的关系。该
from operator import attrgetter class Product: def __init__(self, price, height, width): self.price = price self.height = height self.width = width def __eq__(self, val): attrs = ('width', 'price', 'height') return attrgetter(*attrs)(self) == attrgetter(*attrs)(val) def __ne__(self, val): attrs = ('width', 'price', 'height') return attrgetter(*attrs)(self) != attrgetter(*attrs)(val)
的真相并不意味着x==y
是假的。因此,何时 定义x!=y
,还应定义__eq__()
以便{。}} 运营商将按预期行事。
因此,作为一种更全面的方式,我还在对象中添加了__ne__()
属性。如果其中一个属性不等于它在其他对象中的相对属性,则返回True。
演示:
__ne__