您好,登錄后才能下訂單哦!
在Python中,set
是一個無序的不重復元素集。如果你想要將自定義對象添加到集合中,或者從集合中刪除自定義對象,你需要確保該對象是可哈希的(hashable)。可哈希的對象必須滿足以下兩個條件:
如果你的自定義對象滿足這些條件,你可以通過以下步驟將其與set
結合使用:
__hash__()
和__eq__()
方法。__hash__()
方法返回一個整數,表示對象的哈希值;__eq__()
方法用于比較兩個對象是否相等。下面是一個簡單的例子:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
def __repr__(self):
return f'Person({self.name!r}, {self.age})'
def __hash__(self):
return hash((self.name, self.age))
def __eq__(self, other):
if isinstance(other, Person):
return self.name == other.name and self.age == other.age
return False
# 創建一個集合
people = set()
# 創建一些Person對象
person1 = Person('Alice', 30)
person2 = Person('Bob', 25)
person3 = Person('Alice', 30) # 注意:這個對象與person1實際上是相同的,因為它們有相同的name和age
# 將Person對象添加到集合中
people.add(person1)
people.add(person2)
# 嘗試添加一個與已有對象相等的對象
# 這不會引發錯誤,因為集合中已經有一個相同的對象
people.add(person3)
# 打印集合
print(people) # 輸出可能是:{Person('Alice', 30), Person('Bob', 25)},注意順序可能不同
注意:在這個例子中,Person
類是不可變的,因為它的屬性_name
和_age
都是只讀的(通過@property裝飾器)。如果_name
或_age
是可變的,那么Person
類就不能被添加到集合中,因為可變的對象是不可哈希的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。