Python內置函數
1. classmethod、staticmethod、property 。
上述三個內置函數在文章(Python進階——面向對象之成員)的方法和屬性中已經詳細介紹使用,可以返回瀏覽,具體地址:https://www.jb51.net/article/215871.htm
2. callable,是否可在后面加括號執行。
函數
def func():
pass
print( callable(func) ) # True
類
class Foo(object):
pass
print( callable(Foo) ) # True
類中具有__call__
方法的對象
class Foo(object):
pass
obj = Foo()
print( callable(obj) ) # False
class Foo(object):
def __call__(self, *args, **kwargs):
pass
obj = Foo()
print( callable(obj) ) # True
所以當你以后在見到下面的情況時,首先就要想到handler可以是:函數、類、具有call方法的對象 這三種,到底具體是什么,需要根據代碼的調用關系才能分析出來。
def do_something(handler):
handler()
3. super,按照mro繼承關系向上找成員。
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
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。
info = dict() # {}
info['name'] = "華青水上"
info["age"] = 18
value = info.get("age")
print(value)
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,獲取一個對象的類型。
v1 = "華青水上"
result = type(v1)
print(result) # class 'str'>
v2 = "華青水上"
print( type(v2) == str ) # True
v3 = [11, 22, 33] # list(...)
print( type(v3) == list ) # True
class Foo(object):
pass
v4 = Foo()
print( type(v4) == Foo ) # True
5. isinstance,判斷對象是否是某個類或其子類的實例。
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子類的實例。
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,判斷類是否是某個類的子孫類。
class Top(object):
pass
class Base(Top):
pass
class Foo(Base):
pass
print(issubclass(Foo, Base)) # True
print(issubclass(Foo, Top)) # True
至此,關于面向對象的一些內置函數已經總結完畢,如有不當之處,歡迎指正!
到此這篇關于Python面向對象之內置函數相關知識總結的文章就介紹到這了,更多相關Python內置函數內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python初學者必須掌握的25個內置函數詳解
- 10個使用Python必須知道的內置函數
- Python函數的作用域及內置函數詳解
- python內置函數之slice案例詳解
- Python 內置函數速查表一覽
- python高級內置函數用法實例