首先看乙個例子
#在物件導向中一般情況下怎麼去調屬性class
student:
def__init__
(self, name, age):
self.name =name
self.age =age
defrun(self):
print('
*****====>')
class
teacher(student):
pass
stu1 = student('
zhuyu
', 19)
print(stu1.name) #
其本質就是 stu1.__dict__['name']
print(stu1.__dict__['
name
'])
# 反射:就是通過字串的形式去操作屬性
#學好下面四個方法就好
hasattr(stu1, '
name
') #
就相當於student.name,如果能找到name屬性,就列印返回值true,報錯了的話,就列印返回值false
getattr(stu1, '
run', none) #
獲取物件中的屬性,沒有的話會將第三個引數作為返回值
setattr(stu1, '
salary
', 5000) #
設定屬性 第乙個引數物件,第二個引數是屬性,第三個引數是屬性的值
print(stu1.__dict__
)delattr(stu1,
'salary
') #
刪除乙個屬性
print(stu1.__dict__)
# 下面講乙個使用反射的乙個例子
classftp:
def__init__
(self, ip, port):
self.
__ip =ip
self.
__port =port
defget(self):
print('
%s執行get方法
' % self.__ip
)
defput(self):
print('
%s執行put方法
' % self.__ip
)
defrun(self):
while
true:
cmd = input('
請輸入命令》:
').strip()
if cmd == '
q':break
ifhasattr(self, cmd):
getattr(self, cmd)()
else
:
print('
命令不存在')
f1 = ftp('
1.1.1.1
',8080)
f1.run()
###可以通過反射來實現乙個簡單的c/s架構
物件導向 反射
內建函式 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 ty...
物件導向 多型 類方法 反射 (四)
抽象類鴨子型別 類方法isinstance 與 issubclass 反射多型 指一種型別的事物,擁有多種形態 為了不同的事物呼叫,產生不同的結果 作用 為了在不知道物件具體型別的情況下,同一物件呼叫方法的規範。先抽象,再繼承 父類 定製一套統一的規範 子類 遵循父類的統一的規範。多型的三種表現形式...
python 物件導向反射以及內建方法
一 反射 什麼是反射 可以用字串的方式去訪問物件的屬性,呼叫物件的方法 但是不能去訪問方法 python中一切皆物件,都可以使用放射。反射的四種方法 hasattr hasattr object.name 判斷乙個物件是否有name屬性或者是name方法。有就返回true,沒有就返回false ge...