代码之家  ›  专栏  ›  技术社区  ›  Pranay Saraiwala

使用派生类外的派生类对象调用基类方法

  •  0
  • Pranay Saraiwala  · 技术社区  · 7 年前

    我看过很多帖子,描述了如何在派生类函数中使用super关键字调用基类函数。我想使用派生类对象全局调用基类重载函数。

    class a:
        def __init__(self):
            self.x=45
        def fun(self):
            print "fun in base class"
    class b(a):
        def __init__(self):
            self.y=98           
        def fun(self):
            print "fun in derived class"
    objb=b()
    objb.fun()#here i want to call the base class fun()
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Archeo    7 年前

    输入:

    objb = b()
    super(b, objb).fun()
    

    输出:

    fun in base class
    

    编辑:

    class a(object) 为了让它发挥作用。这源于Python中类的历史演变,该解决方案仅适用于“新型”类,即继承自的类 object 然而,在Python 3.x中,默认情况下所有类都是“新样式”,这意味着您不必执行这个小的加法。

        2
  •  1
  •   zwer    7 年前

    object )你可以这样做:

    objb = b()
    a.fun(objb)  # fun in base class
    

    objb = b()
    objb.__class__.__bases__[0].fun(objb)  # fun in base class
    

    但是,省去了一些麻烦,只需从 对象 super() 基础 杂技。