【发布时间】:2021-04-03 06:33:18
【问题描述】:
class SoftDeleteMixin(object):
deleted_at = Column(DateTime)
deleted = Column(types.SoftDeleteInteger, default=0)
def soft_delete(self, session):
"""Mark this object as deleted."""
self.deleted = self.id
self.deleted_at = timeutils.utcnow()
self.save(session=session)
在类 SoftDeleteMixin 方法 soft_delete 中,它引用了不存在的 self.id 和 self.save。为什么在 python 中可以做到这一点?
注意:重点是类可以引用不存在的变量和方法,而不是Mixin类。
【问题讨论】:
-
您是否尝试实际运行您的代码并调用
soft_delete?你会得到一个AttributeError。 -
可以,如果你实例化这个类的一个对象并尝试使用那个方法,它会抛出一个
AttributeError。请注意,该类似乎旨在用作 mixin,因此从它继承的任何东西都可能具有这些属性 -
@Valentino 在我的代码中,我将继承这个类 SoftDeleteMixin,以及在我的类中包含 id 属性和方法 soft_delete 的其他类。它工作正常。但是我看不懂。
-
您尝试过吗?
self只是对实例的引用,即调用该方法的实例。该实例是否有id?.save?如果没有,它会抛出一个AttributeError,如果是,它不会。 -
"我认为python中的self和之前java中的this是一样的。"这是对的。 Python 中的
self与 Java 中的this相同。这里的问题是 Python 中的继承与 Java 中的继承非常、非常、非常、非常不同。
标签: python