覆盖Python类属性的相等性?

时间:2016-05-20 15:49:50

标签: python oop properties method-overriding

我试图想象如何在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'}

0 个答案:

没有答案