Python面向?qū)ο笾畠?nèi)置函數(shù)相關(guān)知識(shí)總結(jié)
Python內(nèi)置函數(shù)
1. classmethod、staticmethod、property 。
上述三個(gè)內(nèi)置函數(shù)在文章(Python進(jìn)階——面向?qū)ο笾蓡T)的方法和屬性中已經(jīng)詳細(xì)介紹使用,可以返回瀏覽,具體地址:http://chabaoo.cn/article/215871.htm
2. callable,是否可在后面加括號(hào)執(zhí)行。
函數(shù)
def func(): pass print( callable(func) ) # True
類
class Foo(object): pass print( callable(Foo) ) # True
類中具有__call__
方法的對(duì)象
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
所以當(dāng)你以后在見到下面的情況時(shí),首先就要想到handler可以是:函數(shù)、類、具有call方法的對(duì)象 這三種,到底具體是什么,需要根據(jù)代碼的調(diào)用關(guān)系才能分析出來。
def do_something(handler): handler()
3. super,按照mro繼承關(guān)系向上找成員。
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
應(yīng)用場(chǎng)景
假設(shè)有一個(gè)類,他原來已實(shí)現(xiàn)了某些功能,但我們想在他的基礎(chǔ)上再擴(kuò)展點(diǎn)功能,重新寫一遍?比較麻煩,此時(shí)可以用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,獲取一個(gè)對(duì)象的類型。
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,判斷對(duì)象是否是某個(gè)類或其子類的實(shí)例。
class Top(object): pass class Base(Top): pass class Foo(Base): pass v1 = Foo() print( isinstance(v1, Foo) ) # True,對(duì)象v1是Foo類的實(shí)例 print( isinstance(v1, Base) ) # True,對(duì)象v1的Base子類的實(shí)例。 print( isinstance(v1, Top) ) # True,對(duì)象v1的Top子類的實(shí)例。
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,判斷類是否是某個(gè)類的子孫類。
class Top(object): pass class Base(Top): pass class Foo(Base): pass print(issubclass(Foo, Base)) # True print(issubclass(Foo, Top)) # True
至此,關(guān)于面向?qū)ο蟮囊恍﹥?nèi)置函數(shù)已經(jīng)總結(jié)完畢,如有不當(dāng)之處,歡迎指正!
到此這篇關(guān)于Python面向?qū)ο笾畠?nèi)置函數(shù)相關(guān)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Python內(nèi)置函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解
這篇文章主要介紹了Python中使用pypdf2合并、分割、加密pdf文件的代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05深度學(xué)習(xí)tensorflow基礎(chǔ)mnist
mnist作為深度學(xué)習(xí)中的HelloWorld,該小工程詳細(xì)描述了如何從零開始深度學(xué)習(xí),代碼詳細(xì),解釋全面,需要的朋友可以參考下2021-04-04Pytest參數(shù)化parametrize使用代碼實(shí)例
這篇文章主要介紹了Pytest參數(shù)化parametrize使用代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02