"""
在 Python中,反射(Reflection)是指程序在運行時能夠獲取自身的信息以及動態(tài)地操作對象的屬性和方法。
主要涉及以下幾個內(nèi)置函數(shù):
hasattr(obj, name):用于判斷對象 obj 是否具有名為 name 的屬性或方法。
getattr(obj, name[, default]):獲取對象 obj 中名為 name 的屬性或方法,如果不存在且指定了 default,則返回 default,否則拋出 AttributeError 異常。
setattr(obj, name, value):設(shè)置對象 obj 中名為 name 的屬性值為 value。
delattr(obj, name):刪除對象 obj 中名為 name 的屬性。
下面是一個簡單的示例,展示了反射的基本用法:"""
# class MyClass:
# def __init__(self):
# self.x = 10
#
# def my_method(self):
# print("Hello, Reflection!")
#
#
# obj = MyClass()
# 判斷是否具有屬性或方法
# if hasattr(obj, 'my_method'):
# print("對象具有該方法")
# else:
# print("沒有該屬性")
# # 獲取屬性
# print(getattr(obj, 'x'))
# 獲取方法并調(diào)用
# method = getattr(obj,'my_method')
# method()
# 設(shè)置屬性
# setattr(obj, 'y', 20)
# print(obj.y) # 輸出 20
# 刪除屬性
# delattr(obj, 'x')
# try:
# print(obj.x)
# except AttributeError:
# print("'x' 屬性已被刪除")
#
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(800,600)
self.setWindowTitle("反射方法應(yīng)用")
for i in range(60):
setattr(self,f'btn{i}',QCheckBox(f'復(fù)選框{i}',self))
layout = QGridLayout()
for i in range(60):
btn = getattr(self,f'btn{i}')
layout.addWidget(btn,i//10,i%10)
self.setLayout(layout)
self.btn23.setChecked(True)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec())
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。