Python内置函数
1. classmethod、staticmethod、property 。
上述三个内置函数在文章(Python进阶——面向对象之成员)的方法和属性中已经详细介绍使用,可以返回浏览,具体地址:http://www.zzvips.com/article/210684.html
2. callable,是否可在后面加括号执行。
函数
1
2
3
4
|
def func():
pass
print ( callable (func) ) # True
|
类
1
2
3
4
|
class Foo( object ):
pass
print ( callable (Foo) ) # True
|
类中具有__call__
方法的对象
1
2
3
4
5
|
class Foo( object ):
pass
obj = Foo()
print ( callable (obj) ) # False
|
1
2
3
4
5
6
7
|
class Foo( object ):
def __call__( self , * args, * * kwargs):
pass
obj = Foo()
print ( callable (obj) ) # True
|
所以当你以后在见到下面的情况时,首先就要想到handler可以是:函数、类、具有call方法的对象 这三种,到底具体是什么,需要根据代码的调用关系才能分析出来。
1
2
|
def do_something(handler):
handler()
|
3. super,按照mro继承关系向上找成员。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Top( object ):
def message( self , num):
print ( "Top.message" , num)
class Base(Top):
pass
class Foo(Base):
def message( self , num):
print ( "Foo.message" , num)
super ().message(num + 100 )
obj = Foo()
obj.message( 1 )
>>> Foo.message 1
>>> Top.message 101
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Base( object ):
def message( self , num):
print ( "Base.message" , num)
super ().message( 1000 )
class Bar( object ):
def message( self , num):
print ( "Bar.message" , num)
class Foo(Base, Bar):
pass
obj = Foo()
obj.message( 1 )
>>> Base.message 1
>>> Bar.message 1000
|
应用场景
假设有一个类,他原来已实现了某些功能,但我们想在他的基础上再扩展点功能,重新写一遍?比较麻烦,此时可以用super。
1
2
3
4
5
6
7
|
info = dict () # {}
info[ 'name' ] = "华青水上"
info[ "age" ] = 18
value = info.get( "age" )
print (value)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class MyDict( dict ):
def get( self , k):
print ( "自定义功能" )
return super ().get(k)
info = MyDict()
info[ 'name' ] = "华青水上" # __setitem__
info[ "age" ] = 18 # __setitem__
print (info)
value = info.get( "age" )
print (value)
|
4. type,获取一个对象的类型。
1
2
3
|
v1 = "华青水上"
result = type (v1)
print (result) # <class 'str'>
|
1
2
3
4
5
|
v2 = "华青水上"
print ( type (v2) = = str ) # True
v3 = [ 11 , 22 , 33 ] # list(...)
print ( type (v3) = = list ) # True
|
1
2
3
4
5
6
|
class Foo( object ):
pass
v4 = Foo()
print ( type (v4) = = Foo ) # True
|
5. isinstance,判断对象是否是某个类或其子类的实例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Top( object ):
pass
class Base(Top):
pass
class Foo(Base):
pass
v1 = Foo()
print ( isinstance (v1, Foo) ) # True,对象v1是Foo类的实例
print ( isinstance (v1, Base) ) # True,对象v1的Base子类的实例。
print ( isinstance (v1, Top) ) # True,对象v1的Top子类的实例。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class Animal( object ):
def run( self ):
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
data_list = [
"alex" ,
Dog(),
Cat(),
"root"
]
for item in data_list:
if type (item) = = Cat:
item.run()
elif type (item) = = Dog:
item.run()
else :
pass
for item in data_list:
if isinstance (item, Animal):
item.run()
else :
pass
|
6. issubclass,判断类是否是某个类的子孙类。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Top( object ):
pass
class Base(Top):
pass
class Foo(Base):
pass
print ( issubclass (Foo, Base)) # True
print ( issubclass (Foo, Top)) # True
|
至此,关于面向对象的一些内置函数已经总结完毕,如有不当之处,欢迎指正!
到此这篇关于Python面向对象之内置函数相关知识总结的文章就介绍到这了,更多相关Python内置函数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/r1141207831/article/details/117911058