您的位置:首页 > 编程语言 > Python开发

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

2017-04-06 00:00 246 查看
这是面向对象的最后一个部分。

首先看两个函数。

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,最后重新拼接一下输出

&nbs
3ff0
p;

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/

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



本文出自 “麻婆豆腐” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: