文档章节

Python 学习笔记 - 面向对象(其他)

乐搏学院
 乐搏学院
发布于 2017/04/06 15:43
字数 494
阅读 1
收藏 0

这是面向对象的最后一个部分。

 

首先看两个函数。

1.isinstance(obj, cls)

 检查是否obj是否是类 cls 的对象

2.issubclass(sub, super)

检查sub类是否是 super 类的派生类

1

2

3

4

5

6

7

8

9

10

11

12

13

class Bar:

    pass

class Foo(Bar):

    pass

obj = Foo()

# obj,Bar(obj类型和obj类型的父类)的实例

ret = isinstance(obj, Bar)

print(ret)

ret = issubclass(Bar,Foo)

print(ret)

------------------

True

False

3.super

默认情况下,当子类和父类有同名的方法时候,子类的对象调用这个方法是调用的子类的方法。super可以强制调用父类的方法。

比如说

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

class C1:

    def f1(self):

        print('c1.f1')

        return 123

class C2(C1):

    def f1(self):

        # 主动执行父类的f1方法

        ret = super(C2,self).f1()

        print('c2.f1')

        return ret

obj = C2()

m=obj.f1()

print(m)

-----------

c1.f1

c2.f1

123


这种方式使得我们可以灵活地扩展现有的类,增加新的功能,而不需要去修改现有的代码。相对应的,如果使用装饰器的话 我们需要去修改原有的代码。

 

比如,通过super的方式自定义一个有序的字典,基本思路是把key放在一个列表里面,因为列表是有序的,因此我们取值的时候通过列表取到key,然后再通过key取到对应的value,最后重新拼接一下输出

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

class MyDict(dict):

    def __init__(self):

        self.li = []

        super(MyDict,self).__init__()

    def __setitem__(self, key, value):

        self.li.append(key)

        super(MyDict,self).__setitem__(key,value)

    def __str__(self):

        temp_list = []

        for key in self.li:

            value = self.get(key)

            temp_list.append("'%s':%s" %(key,value,))

        temp_str = "{" + ",".join(temp_list) + "}"

        return temp_str

#

obj = MyDict()

obj['k1'= 123

obj['k2'= 456

print(obj)

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “麻婆豆腐” 博客,谢绝转载!

© 著作权归作者所有

共有 人打赏支持
乐搏学院
粉丝 9
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
总结学习 Python 的 14 张思维导图汇总

本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章)。 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列...

两味真火
2017/10/01
4.4K
10
学习 Python 的 14 张思维导图

本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库)。 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条...

天星ing
2017/10/18
0
0
程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2
2018/05/23
0
0
【简明 Python 教程】学习笔记【Python简介及基本概念】

Python的特色:简单、易学、免费开源、高层语言、可移植性、解释性、面向对象、可扩展性、可嵌入性、丰富的库。 Ctrl-d退出提示符; Ctrl-z再按Enter。 复数。 标示符的命名: 标示符是用来标...

donhui
2014/11/27
0
0
2019年推荐几个你看了就会关注的公众号

大V推荐 作为一个可怜弱小又无助的小萌新,求知若渴却找不到良好的渠道去学习,只能看着教科书苦哈哈的抓瞎学习? 不用担心,这里为大家带来如下几个Python和知乎的大佬们!迷茫的萌新们快扫...

JAVA高级架构v
02/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 看见这花臂了么?赶紧叫大佬!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享周华健的单曲《有没有一首歌会让你想起我》 《有没有一首歌会让你想起我》- 周华健 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
98
4
Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
3
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
20
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部