一。面向对象super的作用:
class parent(object):
def __init__(self):
self.test() def test(self):
print('parent---') class BaseHandler(object):
def test(self):
print('BASEhandler')
super(BaseHandler,self).test() #不影响后面函数运行,即运行自身的test函数,也运行别人的。如果不加super的话运行自身后停止运行后面相同的函数名(如果父类和子类都有相同的方法,先运行父类的再运行子类的) class task(BaseHandler,parent):
pass
obj=task()
运行结果:

BASEhandler
parent---

不加super后:

class parent(object):

    def __init__(self):
self.test() def test(self):
print('parent---') class BaseHandler(object):
def test(self):
print('BASEhandler') class task(BaseHandler,parent):
pass
obj=task()
运行结果:

BASEhandler

二。函数继承后self的变化

class Bbh:
def server(self):
self.sz()
def sz(self):
self.xiaowen()
def process_request(self):
print('yun')
class Mr(Bbh):
def sz(self):
print('sz')
def xiaowen(self):
self.process_request()
class Yun:
def process_request(self):
print('yun')
class Zzc(Yun,Mr):
pass
obj=Zzc()
obj.server() #运行结果:
sz
class Bbh:
def server(self):
self.sz()
def sz(self):
self.xiaowen()
def process_request(self):
print('yun')
class Mr(Bbh):
def sz(self):
print('sz')
def xiaowen(self):
self.process_request()
def hello(self):
print(self)
self.test()
def test(self):
print('yun')
class Yun(Mr):
def process_request(self):
print('yun')
def test(self):
print('yun') class Zzc(Yun):
pass obj=Zzc()
obj.hello()

1.obj=Zzc()  #self=Zzc

2.obj.hello()  #Zzc中执行hello方法
3.Zzc中无hello方法,在父类Yun中寻找hello方法。
4.类Yun中无hello方法,在父类Mr类中继续寻找
5.Mr中找到hello方法执行 ,hello方法中执行了self.test()方法,在self(Zzc)中再次寻找test方法
6.Zzc中无test方法,在父类Yun中寻找
7.Yun中找到test方法并执行,执行结果等于“yun"

总结:函数被谁实例化self就会一直等于谁,无论多少层继承关系,self的值始终不变。函数被实例化时首先执行__init__方法,如果类中无init方法那么就执行父类的init方法。如果执行的方法类中没有,就会一层一层网上找。(python3广度优先,python2深度优先

class test:
def hello(self):
print('test--------')
class Mr(test):
pass
class Yun(Mr):
pass
class Bbh(test):
def hello(self):
print('Bbh')
class Zzc(Yun,Bbh):
pass
obj=Zzc()
obj.hello()

结果Bbh(广度优先)

注意:

#两个父类都必须还继承别的类,否则会成为深度优先

如:

class test:
def hello(self):
print('test--------')
class Mr(test):
pass
class Yun(Mr):
pass
class Bbh:
def hello(self):
print('Bbh')
class Zzc(Yun,Bbh):
pass
obj=Zzc()
obj.hello()

运行结果:test--------

class test:
name="test"
def __init__(self):
self.age=23
self.city='bz'
def run(self):
print(self.__dict__) #将init中的变量以字典形式列出来
print(test.name) #访问类变量,及时没有实例化也可以访问,但是实例变量必须要实例化后才能访问,或者会报错
obj=test()
obj.run()

最新文章

  1. ShenNiu.MVC管理系统
  2. (转)ubuntu apache2 的负载均衡和反向代理
  3. jquery 替换文本内容
  4. EditPlus 3.7.164 中文版(4月3日更新)
  5. 学习 HTML5-目录
  6. Linux挂载磁盘
  7. Worm.Win32.DownLoader.ns病毒主进程新式输入法注入分析(IME Inject)
  8. Selenium2学习-032-WebUI自动化实战实例-030-JavaScript 在 Selenium 自动化中的应用实例之五(高亮标示元素)
  9. MySQL基础学习之数据表
  10. 不同优化选项对ARM下C语言编译的影响
  11. InputStream和OutputStream
  12. 几种经典的数据排序及其Java实现
  13. mnesia
  14. python中关于__init__模块文件的理解
  15. jQuery全选、全不选、反选的简洁写法【实例】
  16. c/c++中static的详解
  17. 【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决
  18. BZOJ1084或洛谷2331 [SCOI2005]最大子矩阵
  19. Python 文件 fileno() 方法
  20. 测试Servlet生命周期例子程序

热门文章

  1. 华为Eudemon 100E的密码恢复
  2. ASP.NET动态引用样式表(css)和脚本(js)文件
  3. SQL 的各种 join 用法
  4. 【转】Java学习---内存溢出的排查经历
  5. 【史上最全】申请配置阿里云服务器,并部署IIS和开发环境,项目上线经验
  6. 团队作业——Beta冲刺1
  7. 13.3SolrCloud集群使用手册之Zookeeper指令
  8. SAP BPC方案介绍
  9. Scala学习之路 (九)Scala的上界和下届
  10. MFC单文档视图拆分窗口和相关链接