面向对象进阶-反射(二)重要知识点
生活随笔
收集整理的這篇文章主要介紹了
面向对象进阶-反射(二)重要知识点
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
# 面向?qū)ο蟮倪M(jìn)階
# 其他常用模塊
# 作業(yè) 考試題
# 網(wǎng)絡(luò)編程 2天
# ftp作業(yè)
# class A:pass
# class B(A):pass
# a = A()
# print(isinstance(a,A))返回true,判斷a是不是A的對(duì)象
# print(issubclass(B,A))返回true,判斷B是不是A的子類
# print(issubclass(A,B))》》》返回Flase
# 反射 : 是用字符串類型的名字 去操作 變量
# name = 1
# eval('print(name)') # 安全隱患
# 反射 就沒有安全問題
# 反射 : 是用字符串類型的名字 去操作 變量
# 反射對(duì)象中的屬性和方法 # hasattr getattr setattr delattr
# class A:
# def func(self):
# print('in func')
#
# a = A()
# a.name = 'alex'
# a.age = 63
# # 反射對(duì)象的屬性
# ret = getattr(a,'name') # 通過變量名的字符串形式取到的值
# print(ret)
# print(a.__dict__)
# 變量名 = input('>>>') # func
# print(getattr(a,變量名))#如果不用面向?qū)ο蟮姆瓷?#xff0c;也可以用if判斷input輸入內(nèi)容是否等于‘name’來返回a.name的值
# print(a.__dict__[變量名])#不用反射、if判斷,也可以用__dict__,但遇到需要執(zhí)行func時(shí),if和字典就不管用了,要用反射拿到方法的內(nèi)存地址
#
# # 反射對(duì)象的方法
# a.func()
# ret = getattr(a,'func')
# ret()
#
# class A:
# price = 20
# @classmethod
# def func(cls):
# print('in func')
# # 反射類的屬性
# # A.price
# print(getattr(A,'price'))
#
# # 反射類的方法 :classmethod staticmethod
# # A.func()
# if hasattr(A,'func'):#如果存在才執(zhí)行
# getattr(A,'func')()
#模塊(模塊實(shí)際就是一個(gè)類,my是類名)
/*一個(gè)my的模塊文件def wahaha():
class C:
*/
# import my
# 反射模塊的屬性
# print(my.day)
# print(getattr(my,'day'))
# 反射模塊的方法
# getattr(my,'wahaha')()
# 內(nèi)置模塊也能用
# time
# asctime
# import time
# print(getattr(time,'time')())
# print(getattr(time,'asctime')())
# def qqxing():
# print('qqxing')
# year = 2018
# import sys
# # print(sys.modules['__main__'].year)#modules查看所有導(dǎo)入的模塊,sys.modules['__main__']找到自己的模塊
# # 反射自己模塊中的變量
# # print(getattr(sys.modules['__main__'],'year'))
#
# # 反射自己模塊中的函數(shù)
# # getattr(sys.modules['__main__'],'qqxing')()
# 變量名 = input('>>>')
# print(getattr(sys.modules[__name__],變量名))#取自己模塊名字時(shí),不應(yīng)該用_main_寫死,要想自己模塊為其他模塊A導(dǎo)入對(duì)象時(shí)這段代碼還生效,盡量使用變量_name_來反射,因?yàn)榇藭r(shí)的_main_不為_main_,而是'模塊A名字'
# 要反射的函數(shù)有參數(shù)怎么辦?
# print(time.strftime('%Y-%m-%d %H:%M:S'))
# print(getattr(time,'strftime')('%Y-%m-%d %H:%M:S'))
# 一個(gè)模塊中的類能不能反射得到
# import my
# print(getattr(my,'C')())#拿到一個(gè)類C,加()實(shí)例化
# if hasattr(my,'name'):
# getattr(my,'name') hasattr和getattr常搭配使用,防止報(bào)錯(cuò)
總之,(什么.什么)這種樣式都可以用反射來拿到
# 重要程度半顆星
# setattr 設(shè)置修改變量
class A:
pass
a = A()
setattr(a,'name','nezha') #添加到對(duì)象的空間
setattr(A,'name','alex') #添加到類的空間
print(A.name)
print(a.name)
# delattr 刪除一個(gè)變量
delattr(a,'name') #這里是刪除對(duì)象a里的name屬性('nezha')
print(a.name) #對(duì)象a的name已被刪除,所以找類A的name》》'alex'
delattr(A,'name') #類A的name已被刪除,所以打印會(huì)報(bào)錯(cuò),找不到name了
print(a.name)
# 其他常用模塊
# 作業(yè) 考試題
# 網(wǎng)絡(luò)編程 2天
# ftp作業(yè)
# class A:pass
# class B(A):pass
# a = A()
# print(isinstance(a,A))返回true,判斷a是不是A的對(duì)象
# print(issubclass(B,A))返回true,判斷B是不是A的子類
# print(issubclass(A,B))》》》返回Flase
# 反射 : 是用字符串類型的名字 去操作 變量
# name = 1
# eval('print(name)') # 安全隱患
# 反射 就沒有安全問題
# 反射 : 是用字符串類型的名字 去操作 變量
# 反射對(duì)象中的屬性和方法 # hasattr getattr setattr delattr
# class A:
# def func(self):
# print('in func')
#
# a = A()
# a.name = 'alex'
# a.age = 63
# # 反射對(duì)象的屬性
# ret = getattr(a,'name') # 通過變量名的字符串形式取到的值
# print(ret)
# print(a.__dict__)
# 變量名 = input('>>>') # func
# print(getattr(a,變量名))#如果不用面向?qū)ο蟮姆瓷?#xff0c;也可以用if判斷input輸入內(nèi)容是否等于‘name’來返回a.name的值
# print(a.__dict__[變量名])#不用反射、if判斷,也可以用__dict__,但遇到需要執(zhí)行func時(shí),if和字典就不管用了,要用反射拿到方法的內(nèi)存地址
#
# # 反射對(duì)象的方法
# a.func()
# ret = getattr(a,'func')
# ret()
#
# class A:
# price = 20
# @classmethod
# def func(cls):
# print('in func')
# # 反射類的屬性
# # A.price
# print(getattr(A,'price'))
#
# # 反射類的方法 :classmethod staticmethod
# # A.func()
# if hasattr(A,'func'):#如果存在才執(zhí)行
# getattr(A,'func')()
#模塊(模塊實(shí)際就是一個(gè)類,my是類名)
/*一個(gè)my的模塊文件
day = 'Monday'? # 周一
def wahaha():
??? print('wahahaha')
class C:
??? pass
*/ # import my
# 反射模塊的屬性
# print(my.day)
# print(getattr(my,'day'))
# 反射模塊的方法
# getattr(my,'wahaha')()
# 內(nèi)置模塊也能用
# time
# asctime
# import time
# print(getattr(time,'time')())
# print(getattr(time,'asctime')())
# def qqxing():
# print('qqxing')
# year = 2018
# import sys
# # print(sys.modules['__main__'].year)#modules查看所有導(dǎo)入的模塊,sys.modules['__main__']找到自己的模塊
# # 反射自己模塊中的變量
# # print(getattr(sys.modules['__main__'],'year'))
#
# # 反射自己模塊中的函數(shù)
# # getattr(sys.modules['__main__'],'qqxing')()
# 變量名 = input('>>>')
# print(getattr(sys.modules[__name__],變量名))#取自己模塊名字時(shí),不應(yīng)該用_main_寫死,要想自己模塊為其他模塊A導(dǎo)入對(duì)象時(shí)這段代碼還生效,盡量使用變量_name_來反射,因?yàn)榇藭r(shí)的_main_不為_main_,而是'模塊A名字'
# 要反射的函數(shù)有參數(shù)怎么辦?
# print(time.strftime('%Y-%m-%d %H:%M:S'))
# print(getattr(time,'strftime')('%Y-%m-%d %H:%M:S'))
# 一個(gè)模塊中的類能不能反射得到
# import my
# print(getattr(my,'C')())#拿到一個(gè)類C,加()實(shí)例化
# if hasattr(my,'name'):
# getattr(my,'name') hasattr和getattr常搭配使用,防止報(bào)錯(cuò)
總之,(什么.什么)這種樣式都可以用反射來拿到
# 重要程度半顆星
# setattr 設(shè)置修改變量
class A:
pass
a = A()
setattr(a,'name','nezha') #添加到對(duì)象的空間
setattr(A,'name','alex') #添加到類的空間
print(A.name)
print(a.name)
# delattr 刪除一個(gè)變量
delattr(a,'name') #這里是刪除對(duì)象a里的name屬性('nezha')
print(a.name) #對(duì)象a的name已被刪除,所以找類A的name》》'alex'
delattr(A,'name') #類A的name已被刪除,所以打印會(huì)報(bào)錯(cuò),找不到name了
print(a.name)
轉(zhuǎn)載于:https://www.cnblogs.com/mys6/p/10666759.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的面向对象进阶-反射(二)重要知识点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年社保统筹是什么意思(社保全国统
- 下一篇: Docker 搭建pxc集群 + hap