相关疑难解决方法(0)

5409
推荐指数
22
解决办法
75万
查看次数

在Python类中支持等价("相等")的优雅方法

在编写自定义类时,通过==!=运算符允许等效通常很重要.在Python中,这可以通过分别实现__eq____ne__特殊方法来实现.我发现这样做的最简单方法是以下方法:

class Foo:
    def __init__(self, item):
        self.item = item

    def __eq__(self, other):
        if isinstance(other, self.__class__):
            return self.__dict__ == other.__dict__
        else:
            return False

    def __ne__(self, other):
        return not self.__eq__(other)
Run Code Online (Sandbox Code Playgroud)

你知道更优雅的做法吗?您是否知道使用上述比较方法的任何特殊缺点__dict__

注意:有点澄清 - 何时__eq____ne__未定义,您会发现此行为:

>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
False
Run Code Online (Sandbox Code Playgroud)

也就是说,a == b评估是False因为它真的运行a is b,是对身份的测试(即" a与...相同的对象b"). …

python equality equivalence

384
推荐指数
6
解决办法
18万
查看次数

sqlalchemy id等同于引用相等

我第一次使用SQLAlchemy并且想知道......一般来说,在使用SQLAlchemy vs id(主键)相等时,依赖python的默认等式语义是否足够?

在我以前使用ORM技术(如Java的Hibernate)工作的其他项目中,我们总是覆盖.equals()以检查对象的主键/ id是否相等,但是当我回头看时我不确定这个总是必要的.

在大多数情况下(如果不是所有情况)我都能想到,您只有一个具有给定id的给定对象的引用.并且该对象始终是附加对象,因此从技术上讲,您可以通过引用相等而逃脱.

简短的问题:在使用SQLAlchemy时,我是否应该为我的业务实体重写eq()和hash()?

python sqlalchemy

8
推荐指数
1
解决办法
3059
查看次数