python3.x - python如何优雅的调用父类方法
伊谢尔伦
伊谢尔伦 2017-04-18 10:04:09
[Python讨论组]

代码如下:

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

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

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

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(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()
ringa_lee

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

巴扎黑

如果是想真正的调用 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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号