面向對象 反射方法
阿新 • • 發佈:2018-08-08
如果 span init pass 找到 pre 簡單的 student pan
首先看一個例子
#在面向對象中一般情況下怎麽去調屬性
class Student: def __init__(self, name, age): self.name = name self.age = age def run(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__)
# 下面講一個使用反射的一個例子
class Ftp: def __init__(self, ip, port): self.__ip = ip self.__port = port def get(self): print(‘%s執行get方法‘ % self.__ip) def put(self): print(‘%s執行put方法‘ % self.__ip) def run(self): while True: cmd= input(‘請輸入命令>>:‘).strip() if cmd == ‘q‘:break if hasattr(self, cmd): getattr(self, cmd)() else: print(‘命令不存在‘) f1 = Ftp(‘1.1.1.1‘,8080) f1.run()
###可以通過反射來實現一個簡單的c/s架構
面向對象 反射方法