我试图想象如何在Python中实现对类属性(不仅仅是类)的重写等式的支持。
假设我有一个虚构的Python类:
class Table(object):
"""Table object"""
def __init__(self,path):
self.schema = {0:'Name',1:'Name1'}
tbl = Table(r'\\data\path')
tbl.schema
>>> {0: 'Name', 1: 'Name1'}
将根据DB表的路径创建类实例,并且我想为此类创建一个schema属性,该属性将存储字段及其名称的“顺序”。
我知道我可以用
检查类属性相等性 tbl.schema == tbl1.schema
但是如果我想在不考虑字段顺序的情况下检查模式是否相同怎么办?
我可以创建另一个属性schema_no_order
并在那里只存储set
{'Name', 1: 'Name1'}
,以便能够检查两个表的schema_no_order
属性的相等性。这意味着有两个属性存储几乎相同的信息。
我认为应该有更优雅的解决方案。
是否可以专门为class属性覆盖相等性检查,而不是类本身?
所以不要像我们在课上那样做
def __eq__(self, other):
return self.__dict__ == other.__dict__
类似但特定于某种财产平等检查的东西:
def __eq__prop_name__(self,other,prop_name):
return set(self.schema.values()) == set(other.schema.values())
因此,在这种特殊情况下,具有相同字段名称的表的模式将被视为“相等”。
tbl.schema == tbl1.schema
{0: 'Name', 1: 'Name1'} == {2: 'Name', 3: 'Name1'}