博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 学习笔记 - 面向对象(其他)
阅读量:7207 次
发布时间:2019-06-29

本文共 1427 字,大约阅读时间需要 4 分钟。

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

首先看两个函数。

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)
本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1858805,如需转载请自行联系原作者
你可能感兴趣的文章
面试题——出界概率问题
查看>>
常用基于注解备忘笔记
查看>>
PHP Redis 全部操作方法 转载
查看>>
MySQL源码分析(一)
查看>>
WCF 实例模式和对象生命周期
查看>>
小程序-地图API
查看>>
如何获得Spring容器里管理的Bean,。不论是Service层,还是实体Dao层
查看>>
通过yum源在centOS7安装mysql8
查看>>
关于设计模式的文章链接
查看>>
IIS Express 不允许的父路径(原创)
查看>>
MS SQL Server各种日期计算实现方法
查看>>
过滤器和拦截器的区别
查看>>
idea看源码
查看>>
bfc
查看>>
hdu 1426 Sudoku Killer (dfs)
查看>>
幽默一下
查看>>
彩色打印KMP匹配过程
查看>>
python 基础笔记二
查看>>
广图登陆知网下载资源教程
查看>>
实现一个随着内容多少而拉伸的view
查看>>