继承类访问基类方法,有时候提示基类方法找不到,为什么?

JeanLove 2018-05-13 01:10:21
我有下面一个小程序,多继承:
A
/ \
B C
\ /
D

class A(object):
def f(self):
print 'A f'
class B(A):
def __init__(self):
print "B init"
class C(A):
def f(self):
print 'C f'

class D(B,C):
def __init__(self):
print "D init"
def g(self):
f()
d=D()
d.f() # ok
d.g() # 有问题

python运行的时候提示错误

d.g()
NameError: global name 'f' is not defined


这是为什么?在主流程里面d.f()可以,而在D这个类型的内部,g()调用f()却说不行。
...全文
614 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢乐的小猪 2018-05-14
  • 打赏
  • 举报
回复
如果是python3,稍稍有点不一样,但是更简练了。希望你还是从python3学起吧
class A(object):
    def f(self):
        print( 'A f')



class B(A):
    def __init__(self):
        print(  "B init")



class C(A):
    def f(self):
        print('C f')



class D(B, C):
    def __init__(self):
        print
        "D init"

    def g(self):
        super().f()


d = D()
d.f()  # ok
d.g()  # 有问题
欢乐的小猪 2018-05-14
  • 打赏
  • 举报
回复
如果是python2.当然就是你用的,需要说明C是基类的方法。。。
class A(object):
    def f(self):
        print 'A f'
class B(A):
    def __init__(self):
        print "B init"
class C(A):
    def f(self):
        print 'C f'
 
class D(B,C):
    def __init__(self):
        print "D init"
    def g(self):
        super(D,self).f()
d=D()
d.f() # ok
d.g()  
2018-05-14
  • 打赏
  • 举报
回复
你的f在C里,可能要写成C里的f,而不能直接使用。改成C.f(self),我也不太清楚为甚么要加一个self进去。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧