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 method soft_delete, it references nonexistent self.idself.save.为什么在Python中能做到这一点?

Note: the focus is the class can reference nonexistent variable和method, not that it is a Mixin class.

5 个评论
你有没有试着实际运行你的代码并调用soft_delete?你会得到一个AttributeError
它可以,如果你实例化一个这个类的对象并试图使用该方法,它将抛出一个AttributeError。注意,这个类似乎是要作为一个混合体来使用的,所以无论从它继承的是什么,都应该具有这些属性
PZY
@Valentino 在我的代码中,我将继承这个SoftDeleteMixin类,以及其他包括id属性和soft_delete方法的类。它的工作是正确的。但我无法理解。
你有没有tried它?替换代码0】只是对一个实例的引用,即方法被调用的那个实例。该实例是否有id.save?如果没有,它就会抛出一个AttributeError,如果有,它就不会。
"我认为python中的self和之前java中的这个是一样的。"这是正确的。Python中的self与Java中的this是一样的。这里的问题是,Python中的继承与Java中的继承是非常、非常、非常、非常不同的。
python
PZY
PZY
发布于 2020-12-25
2 个回答
Valentino
Valentino
发布于 2020-12-25
已采纳
0 人赞同

如果你实例化一个SoftDeleteMixin类并调用soft_delete方法,你会得到一个AttributeError