python如何优雅的调用父类方法

代码如下:

class A():
    def aa():
        self.m = True

这个是一个A类,我想创建一个B类,来调用A类下的self.m这个变量 要如何实现?
我天真的想法是这样的,但是不行

class B(A):
    if A().aa().m:
        ...
    else:
        ...
    

这样的方式来调用 但是不行

阅读 6.8k
4 个回答

调用父类的方法很简单,在字类中super(子类, self).方法名()

既然继承了A,那“m”属性自然可以直接访问了。

class A(object):                                                                    
    def __init__(self):                                                             
        self.m = False                                                              
                                                                                    
    def aa(self):                                                                   
        self.m = True                                                               
                                                                                    
class B(A):                                                                         
    def __init__(self):                                                             
        super(B, self).__init__()                                                   
    def bb(self):                                                                   
        print(self.m)                                                               
                                                                                    
b = B()                                                                                                                                                                                     
b.bb()

看看黄哥的解决方法。
没有用继承,用的是组合。
图片描述

如果是想真正的调用 A 实例的 m 的话:

class B:
    def __init__(self, a):
        self.a = a   # a 是 A 的实例
        
    def func(self):
        self.a.aa()
        if self.a.m:
            ...

super 调用的其实是 B 实例的 m 属性:

class A:                                                               
    def aa(self):  
        print("self is {0}".format(self))                                                                 
        self.m = True                                                               
                                                                                    
class B(A):                                                
    def func(self):                                                                   
        super().aa()
        print(self.m)
        
b = B()
b.func()

$ python3 test.py
self is <__main__.B object at 0x10f4f4438>
True
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题