国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python進階_淺談面向?qū)ο筮M階

2020-02-16 02:05:44
字體:
供稿:網(wǎng)友

學(xué)了面向?qū)ο笕筇匦岳^承,多態(tài),封裝。今天我們看看面向?qū)ο蟮囊恍┻M階內(nèi)容,反射和一些類的內(nèi)置函數(shù)。

一、isinstance和issubclass

class Foo: passclass Son(Foo): passs = Son()#判斷一個對象是不是這個類的對象,傳兩個參數(shù)(對象,類)print(isinstance(s,Son))print(isinstance(s,Foo))#type更精準(zhǔn)print(type(s) is Son)print(type(s) is Foo)#判斷一個類是不是另一類的子類,傳兩個參數(shù)(子類,父類)print(issubclass(Son,Foo))print(issubclass(Son,object))print(issubclass(Foo,object))print(issubclass(int,object))

二、反射

反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力(自省)。這一概念的提出很快引發(fā)了計算機科學(xué)領(lǐng)域關(guān)于應(yīng)用反射性的研究。它首先被程序語言的設(shè)計領(lǐng)域所采用,并在Lisp和面向?qū)ο蠓矫嫒〉昧顺煽儭?/p>

python面向?qū)ο笾械姆瓷洌和ㄟ^字符串的形式操作對象相關(guān)的屬性。python中的一切事物都是對象(都可以使用反射)

四個可以實現(xiàn)反射的函數(shù):hasattr,getattr,setattr,delattr

下列方法適用于類和對象(一切皆對象,類本身也是一個對象)

class Foo: def __init__(self):  self.name = 'egon'  self.age = 73 def func(self):  print(123)egg = Foo()#常用:#hasattr#getattr# print(hasattr(egg,'name'))print(getattr(egg,'name'))if hasattr(egg,'func'): #返回bool Foo_func = getattr(egg,'func') #如果存在這個方法或者屬性,就返回屬性值或者方法的內(nèi)存地址         #如果不存在,報錯,因此要配合hasattr使用 Foo_func()#不常用:#setattr# setattr(egg,'sex','屬性值')# print(egg.sex)# def show_name(self):#  print(self.name + ' sb')# setattr(egg,'sh_name',show_name)# egg.sh_name(egg)# show_name(egg)# egg.sh_name()#delattr# delattr(egg,'name')# print(egg.name)# print(egg.name)# egg.func()# print(egg.__dict__)#反射#可以用字符串的方式去訪問對象的屬性、調(diào)用對象的方法反射舉例1
class Foo: f = 123 #類變量 @classmethod def class_method_demo(cls):  print('class_method_demo') @staticmethod def static_method_demo():  print('static_method_demo')# if hasattr(Foo,'f'):#  print(getattr(Foo,'f'))print(hasattr(Foo,'class_method_demo'))method = getattr(Foo,'class_method_demo')method()print(hasattr(Foo,'static_method_demo'))method2 = getattr(Foo,'static_method_demo')method2()#類也是對象
反射舉例2
import my_module# print(hasattr(my_module,'test'))# # func_test = getattr(my_module,'test')# # func_test()# getattr(my_module,'test')()#import其他模塊應(yīng)用反射from my_module import testdef demo1(): print('demo1')import sysprint(__name__) #'__main__'print(sys.modules)#'__main__': <module '__main__' from 'D:/Python代碼文件存放目錄/S6/day26/6反射3.py'>module_obj =sys.modules[__name__] #sys.modules['__main__']# module_obj : <module '__main__' from 'D:/Python代碼文件存放目錄/S6/day26/6反射3.py'>print(module_obj)print(hasattr(module_obj,'demo1'))getattr(module_obj,'demo1')()#在本模塊中應(yīng)用反射反射舉例3            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 衡阳市| 长武县| 清镇市| 库伦旗| 奉节县| 自贡市| 随州市| 大竹县| 封丘县| 吉木萨尔县| 汶上县| 清水河县| 长沙县| 沐川县| 田阳县| 南川市| 凤凰县| 恩施市| 盐山县| 龙胜| 犍为县| 海南省| 定州市| 合川市| 盘锦市| 礼泉县| 城市| 赣州市| 清新县| 湘潭市| 田东县| 辰溪县| 新野县| 潞西市| 鄢陵县| 甘德县| 莒南县| 高州市| 攀枝花市| 通榆县| 施秉县|