【问题标题】:Django - Introspect django Model in a method implemented in its abstract ancestor?Django - 在其抽象祖先中实现的方法中自省 django 模型?
【发布时间】:2010-07-15 12:29:31
【问题描述】:

在 django 中,我想引用其方法被调用的类,其中方法本身在其abstract ancestor 中实现。

class AbstractFather(models.Model):
    class Meta:
        abstract = True
    def my_method(self):
        # >>> Here <<<

class Child(AbstractFather):
    pass

我想做类似的事情:

isinstance(instance, Child):

当然我无法在 my_method 中知道哪个子 Model 被称为先验。

【问题讨论】:

  • 你能澄清一下吗?你是说 self.childmethod() 不起作用吗?您以这种方式构建它的原因是什么?
  • my_method 中的 self 实际上是孩子的实例,因为 AbstractFather 是...抽象 :)

标签: django inheritance abstract-class


【解决方案1】:

琐碎而有效:

class AbstractFather(models.Model):
    class Meta:
        abstract = True
    def my_method(self,some_instance):
        print isinstance(some_instance,self.__class__)

class Child(AbstractFather):
    pass

【讨论】:

    【解决方案2】:

    你为什么这么说?你绝对可以。 AbstractFather 是一个抽象模型,因此它永远不会被实例化,因此您始终可以确定调用my_method 的任何东西都是子类的实例。你给出的语法应该可以工作。

    编辑 那么你到底想比较什么? my_method 中的 self 将始终是相关实例,其类将始终是 AbstractFather 的特定子类。您需要检查什么?

    【讨论】:

    • 我的意思是我不应该在 AbstractFather 中对 Child 进行硬编码,因为实际上有 Child1、Child2 等……在这个意义上,AbstractFather 事先并不知道它的孩子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2013-05-08
    • 2020-04-12
    • 2020-07-10
    相关资源
    最近更新 更多