反射
classa:
def__init__
(self, a)
: self.a = a
defget_a
(self)
:print
(self.a)
classb:
def__init__
(self, b)
: a.__init__(self, b)
print
('\n'
.join(i for i in
dir(b(
'a'))if
not i.startswith(
'_')
))
a
classa:
def__init__
(self, a)
: self.a = a
defget_a
(self)
:print
(self.a)
class
b(a)
:def
__init__
(self, b)
: a.__init__(self, b)
print
('\n'
.join(i for i in
dir(b(
'a'))if
not i.startswith(
'_')
))
aget_a
classa:
def__init__
(self)
: self.a =
1def
get_a
(self)
:print
(self.a)
class
aa(a)
:def
__init__
(self, aa)
:super()
.__init__(
) self.aa = aa
class
b(aa)
:def
__init__
(self, aa, b)
:super()
.__init__(aa)
self.b = b
print
('\n'
.join(i for i in
dir(b(
'a',
'b'))if
not i.startswith(
'_')
))
aaab可以看到get_a
super().__init__()
和b.__init__(self)
有區別
classa:
def__init__
(self)
: self.a =
1def
get_a
(self)
:print
(self.a)
classb:
def__init__
(self)
: self.b =
2def
get_b
(self)
:print
(self.b)
class
c(a, b)
:def
__init__
(self, c)
:super()
.__init__(
) self.c = c
print
('\n'
.join(i for i in
dir(c(3)
)ifnot i.startswith(
'_')
))
acget_a
get_b
classa:
def__init__
(self)
: self.a =
1def
get_a
(self)
:print
(self.a)
classb:
def__init__
(self)
: self.b =
2def
get_b
(self)
:print
(self.b)
class
c(a, b)
:def
__init__
(self, c)
: a.__init__(self)
b.__init__(self)
self.c = c
print
('\n'
.join(i for i in
dir(c(3)
)ifnot i.startswith(
'_')
))
abc即把字串反射成記憶體物件;使用hasattr和getattrget_a
get_b
示例:英雄繼承小兵,並擴充套件新技能
from collections import deque
# 小兵
class
dogface
:def
__init__
(self, name, hp=
100)
: self.name = name
self.hp = hp
self.menu = deque([(
'攻擊'
,'attack'),
('返回'
,'back'),
('退出'
,'disconnect')]
)def
attack
(self)
:print
('attack'
)def
back
(self)
: self.menu =
none
defdisconnect
(self)
: exit(
'disconnect'
)# 列印
defshow_menu
(self)
:while self.menu:
for e, i in
enumerate
(self.menu)
:print
(e +
1, i[0]
)try
: n =
int(
input
('選擇數字: '
).strip())
choice = self.menu[n -1]
[1] funct =
getattr
(self, choice,
'not found'
) funct(
)except exception as error:
print
(error)
# 英雄
class
hero
(dogface)
:def
__init__
(self, name, hp=
100, mp=10)
:super()
.__init__(name, hp)
self.mp = mp
self.menu.extendleft([(
'回血'
,'treat'),
('法術'
,'magic')]
)def
treat
(self)
:print
('treat'
, self.hp)
defmagic
(self)
:print
('magic'
, self.mp)
if __name__ ==
'__main__'
: h = hero(
'劍聖'
) h.show_menu(
) d = dogface(
'苦工'
) d.show_menu(
)print
('back'
)
python基礎 反射和異常
反射 通俗的說就是你給乙個字串,我就能匹配到和字串相同的函式進行呼叫 反射舉例說明 def bulk self print s is yelling self.name class dog object def init self,name self.name name defeat self,fo...
python 反射 python中的反射
什麼是反射?有時我們要訪問某個變數或是方法時並不知道到底有沒有這個變數或方法,所以就要做些判斷。判斷是否存在字串對應的變數及方法。我們知道訪問變數時是不能加引號的,否則會被當成字串處理。如果要通過字串找到對應的變數,那該怎麼辦呢 反射就是用於解決上面兩個問題而產生的,所謂反射,按我的理解就是反過來告...
python反射例項化 python反射
定義 通過字串的形式去操作物件 類,例項物件,模組中的物件 中的成員 增刪改查 叫反射。一 類例項物件class foo tests test def init self,name,age self.name name self.age age def show self return s s se...