Python 物件導向2

2021-09-25 21:08:55 字數 3365 閱讀 7683

instance 和 issubclass

class

foo:

pass

foo = foo(

)print

(isinstance

(foo, foo)

)print

(isinstance(1

,int))

true

true

class

foo:

pass

foo = foo(

)print

(isinstance

(foo, foo)

)print

(isinstance(1

,int))

class

foo:

pass

class

bar(foo)

:pass

print

(issubclass

(bar,foo)

)true

所謂反射,是指程式可以訪問、檢測和修改它本身狀態或者行為的一種能力(自省)

在python中,物件導向中的反射是指通過字串的形式操作物件的相關屬性。

四個可以實現自省的函式

attribute

getatter

setatter

delatter

class

foo:

f ='類的靜態變數'

def__init__

(self, name, age)

: self.name = name

self.age = age

defsay(self)

:print

('hello,%s'

% self.name)

obj = foo(

'tom',22

)# # 檢測是否含有某個屬性

print

(hasattr

(obj,

'name'))

print

(hasattr

(obj,

'say'))

## # 獲取屬性

gt =

getattr

(obj,

'name'

)print

(gt)

gtf =

getattr

(obj,

'say'

)gtf(

)# gtf1 = getattr(obj,'hello') #不存在報錯

print

(obj.__dict__)

# 屬性值通過字典輸出

# # 設定屬性

setattr

(obj,

'good man'

,true

)setattr

(obj,

'show_name'

,lambda self: self.name +

'good man'

)print

(obj.__dict__)

print

(obj.show_name(obj))#

# 刪除屬性

delattr

(obj,

'show_name'

)print

(obj.__dict__)

# delattr(obj, 'hello') #不存在報錯

true

true

tomhello,tom

tomgood man

聯想,字串、列表、元組可以通過索引值引用值,字典可以通過關鍵字引用值。

##item系列

class

foo:

def__init__

(self, name)

: self.name = name

def__getitem__

(self, item)

:print

(self.__dict__[item]

)def

__setitem__

(self, key, value)

: self.__dict__[key]

= value

def__delitem__

(self, key)

:print

('del obj[key]時:'

) self.__dict__.pop(key)

def__delattr__

(self, item)

:print

('del obj.key時:'

) self.__dict__.pop(item)

obj1 = foo(

'tom'

)obj1[

'age']=

18obj1[

'age1']=

19print

(obj1.__dict__)

del obj1[

'age'

]del obj1.age1

print

(obj1.__dict__)

obj1[

'name']=

'jack'

print

(obj1.__dict__)

del obj[key]時:

del obj.key時:

##__del__

析構方法,當物件在記憶體被釋放,就會自動觸發執行

一般不需要自定義

class

foo:

def__del__

(self)

:print

('執行del函式了'

)obj = foo(

)del obj

執行del函式了

class

cat:

def__init__

(self,new_name,new_age)

: self.name = new_name

self.age = new_age

def__str__

(self)

:return

'名字是:%s,年齡是:%s'

%(self.name,self.age)

obj = cat(

'lucky',1

)print

(obj)

名字是:lucky,年齡是:1

python物件導向2

主要通用 新增到屬性名前,可以讓該屬性得到乙個保護 class wudang name 武當 kongfu list aaa bbb ccc wd wudang print wd.name print wd.kong list 定義類的時候,如果希望繼承自另外乙個類 可以通過 class 類名 父類...

Python 物件導向 2

組合 適合沒干係的橫向類,比如池塘,烏龜,魚 把類的例項化放到新類裡面 屬性名和方法名相同,屬性會覆蓋掉方法 繫結 方法需要例項才能被呼叫!這種限制即繫結 用self接受繫結 class ball def xx self,a print b ball b.xx 123 刪除del ball類時,b....

Python 物件導向程式設計2

start object 類是所有類的父類,它定義了好多方法,重寫這些方法我們可以定製自己的類。我們可以比較兩個數字的大小,那我們自定義的類可不可以呢?其實很簡單,我們只需要重寫 object 類中定義的比較方法即可。class mynumber 初始化屬性 def init self,num se...