物件導向 反射

2022-09-14 00:57:17 字數 2800 閱讀 6295

內建函式:

1.isinstance:判斷乙個物件和乙個類有沒有血緣關係

class a:pass

class b(a):pass

a =b()

print(isinstance(a,b)) #

true

print(isinstance(a,a)) #

true

print(type(a) is b) #

true

print(type(a) is a) #

false

2.issubclass(子類名,父類名):檢測繼承關係,返回true說明與繼承關係
class a:pass

class b(a):pass

class c(b):pass

print(issubclass(c,b))#

true

print(issubclass(c,a))#

true

反射

中的名字,找乙個屬性直接就可以找到這個屬性的值,找乙個方法找到的是這個方法的記憶體位址。

反射的4個內建函式:

1.hasatter:判斷乙個命名空間裡是否有乙個屬性或方法

class

a: role = '

person

'def

func(self):

print('

*'*self)

print(hasattr(a,'

r')) #

false

print(hasattr(a,'

role

')) #

true

print(hasattr(a,'

func

')) #

true

ret = input('

>>>')

ifhasattr(a,ret):

print

(getattr(a,ret))

ifhasattr(a,ret):

func =getattr(a,ret)

func(12)

2.getatter:從乙個命名空間裡獲取乙個屬性或方法的值,方法需要呼叫。
class

a: role = '

person

'def

func(self):

print('

*'*self)

ret = input('

>>>')

print(getattr(a,'

role

')) #

從a的命名空間裡找乙個屬性,直接可以找到這個屬性的值

f = getattr(a,'

func

');f(3) #

從a的命名空間裡找乙個方法,找到的是這個方法的記憶體位址

a.func(1)

3.setatter:增加和修改

4.delatter:刪除

class

a:

def__init__

(self,name):

self.name =name

defwahaha(self):

print('

wahahaha')

a = a('

alex')

#a.age = 18

#print(a.__dict__)

setattr(a,'

age',18) #

增加乙個屬性

print(a.__dict__) #

setattr(a,'

name

','taibao

') #

修改乙個屬性

print(a.__dict__)#

delattr(a,'

age') #

刪除乙個屬性

print(a.__dict__) #

內建方法

len()內建方法和內建函式__len__是對應的關係

class

a:

def__init__

(self,name,age,***,cls):

self.name =name

self.age =age

self.*** =***

self.cls =cls

def__len__

(self):

return len(self.__dict__

)a = a('

alex

',18,'

man',2)

print(len(a)) #

4a.hobby = '燙頭'

print(len(a)) #

5

hash()內建方法和內建函式__hash__是對應的關係

class

a:

def__init__

(self,name,age,***,cls):

self.name =name

self.age =age

self.*** =***

self.cls =cls

def__hash__

(self):

return 1a = a('

alex

',18,'

man',2)

print(hash(a)) #

1

物件導向之反射

反射 python中的反射功能是由以下四個內建函式提供 hasattr getattr setattr delattr,改四個函式分別用於對物件內部執行 檢查是否含有某成員 獲取成員 設定成員 刪除成員。class foo object def init self self.name wupeiqi...

Python物件導向 反射

1.什麼是反射 反射的概念是由smith在1982年首次提出的,主要是指程式可以訪問 檢修和修改它本身狀態或行為的一種能力 自省 這一概念的提出很快引發了計算科學領域關於應用反射性的研究。它率先被程式語言的設計領域所採用。3.可以實現自省的四個函式 舉個例子 class people country...

物件導向之反射

isinstance與issubclass是python的內建模組 isinstance class foo pass class boo pass foo obj foo boo obj boo print isinstance foo obj,foo true print isinstance ...