【问题标题】:Python, cant overide a method [duplicate]Python,无法覆盖方法[重复]
【发布时间】:2021-09-19 04:57:17
【问题描述】:

我有这段代码,即使我指定了super(admin_base, self).test() 方法,它也会从 parent_model_admin 类中打印“1”,我如何在 admin_base 中打印“2”但在管理类中?

class theme():
    pass

class parent_model_admin():

    def test(self):
        print("1")
        pass
    pass


class admin_base(theme,parent_model_admin):
    def test(self):
        print("2")
        pass
    pass


class user(parent_model_admin):
    def test(self):
        print("3")
        pass
    pass


class admin(user, admin_base):
    def test(self):
        super(admin_base, self).test()
        pass
    pass

hai = admin()
hai.test()

【问题讨论】:

  • 如果我的理解是正确的,为什么不在admin 类中使用print("3")
  • 这里的问题称为方法解析顺序 (MRO)。有关其工作原理的详细信息,请参阅重复问题的答案。

标签: python python-3.x


【解决方案1】:

admin 类更改为:

class admin(user, admin_base):
    def test(self):
        super(user, self).test()
        pass
    pass

请改用super(user, self).test()

完整代码:

class theme():
    pass

class parent_model_admin():

    def test(self):
        print("1")
        pass
    pass


class admin_base(theme,parent_model_admin):
    def test(self):
        print("2")
        pass
    pass


class user(parent_model_admin):
    def test(self):
        print("3")
        pass
    pass


class admin(user, admin_base):
    def test(self):
        super(user, self).test()
        pass
    pass

hai = admin()
hai.test()

输出:

2

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2011-04-19
    • 2015-09-19
    相关资源
    最近更新 更多