专栏首页python3python3面向对象注意事项

python3面向对象注意事项

一。面向对象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()

View Code

运行结果:

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()

View Code

运行结果:

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

View Code

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()

View Code

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()

View Code

结果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()

View Code

运行结果: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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python -- str 类

    def capitalize(self):   # 全部字母变小写只有首字母变大写;

    py3study
  • Python 单元测试 & 文档测试

               raise AttributeError(r"'Dict' has no attribute %s." % key)

    py3study
  • Python 的异步 IO:Async

    首先,为了便于测试,我们用 Python 内建的 http 模块,运行一个简单的 HTTP Server。

    py3study
  • Python 单元测试 & 文档测试

               raise AttributeError(r"'Dict' has no attribute %s." % key)

    py3study
  • Python后端技术栈(三)--设计模式

    Somewhere, something incredible is waiting to be known.

    小闫同学啊
  • python面向对象-封装-property-接口-抽象-鸭子类型-03

    # 将复杂的丑陋的隐私的细节隐藏到内部,对外提供简单的使用接口 或 # 对外隐藏内部实现细节,并提供访问的接口

    suwanbin
  • python面向对象,类

        是面向对象中的俩个重要概念,类是对事物的抽象,比如人类,球类。对象是事物的实例,比如足球,篮球。球类可以对球的特征和行为进行抽象,然后可以实例化一个真实...

    py3study
  • 10个Python面试常问的问题

    源 | segmentfault,小象学院 文 | xiaochao 概述 Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展...

    昱良
  • 10个Python常见面试题,这些弄不明白不要说学过Python!

    Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。下面我收集了10个Python面试官经常问的问题,...

    用户2769421
  • python模拟登陆Github示例

    输入账号密码,打开开发者工具,在Network页勾选上Preserve Log(显示持续日志),点击登录,查看Session请求,找到其请求的URL与Form ...

    py3study

扫码关注云+社区

领取腾讯云代金券