python-property、反射

# ### property?
"""
可以把方法變成屬性 : 可以動態的控制屬性的獲取,設置,刪除相關操作
@property ?獲取屬性
@方法名.setter ?設置屬性
@方法名.deleter 刪除屬性
"""

# 方法一
"""是同一個方法名"""
class MyClass():
?? ?
?? ?def __init__(self,name):
?? ??? ?self.name = name
?? ??? ?
?? ?@property
?? ?def username(self):
?? ??? ?return self.name
?? ??? ?# pass
?? ??? ?
?? ?@username.setter
?? ?def username(self,val):
?? ??? ?# print(val)
?? ??? ?self.name = val
?? ??? ?pass
?? ??? ?
?? ?@username.deleter
?? ?def username(self):
?? ??? ?# print("222")
?? ??? ?del self.name
?? ??? ?pass

obj = MyClass("小紅")
# 獲取值的時候自動觸發@property 裝飾器下的方法
res = obj.username
print(res)

# 設置值的時候自動觸發@username.setter 裝飾器下的方法
obj.username = "小蘭"
print(obj.username)

# 刪除值的時候自動觸發@username.deleter 裝飾器下的方法
# del obj.username
# print(obj.username)


# 方法二
class MyClass():

?? ?def __init__(self,name):
?? ??? ?self.name = name
?? ??? ?
?? ?# 獲取數據
?? ?def get_username(self):
?? ??? ?return self.name
?? ?
?? ?# 設置數據
?? ?def set_username(self,val):
?? ??? ?self.name = val
?? ?
?? ?# 刪除數據
?? ?def del_username(self):
?? ??? ?del self.name
?? ??? ?
?? ?# 參數的順序: 獲取 , 設置 ?, 刪除
?? ?username = property(get_username , set_username ?, del_username )
?? ??? ?


obj = MyClass("小芳")
# 獲取值的時候,執行get_username下的相關操作
print(obj.username)

# 設置值的時候,執行 set_username 下的相關操作
obj.username = "11223344"
print(obj.username)

# 刪除值的時候,執行 del_username 下的相關操作
del obj.username
print(obj.username)

# ### 反射
""" 通過字符串操作類對象 或者 模塊中的相關成員的操作 """
"""
#hasattr() 檢測對象/類是否有指定的成員
#getattr() 獲取對象/類成員的值
#setattr() 設置對象/類成員的值
#delattr() 刪除對象/類成員的值?
"""


# ### part1 通過字符串反射類對象中的成員
class Father():
?? ?pass

class Mother():
?? ?pass
?? ?
class Children(Father,Mother):
?? ?eye = "藍色的"
?? ?weight = "1噸"
?? ?
?? ?def eat(self):
?? ??? ?print("小孩下生會喝奶")
?? ?
?? ?def drink(self):
?? ??? ?print("小孩下生喜歡喝勇闖天涯...")
?? ??? ?
?? ?def __la(self):
?? ??? ?print("小孩自動啦,無法控制")
?? ?
obj = Children()
?? ?
# (1)hasattr() 檢測對象/類是否有指定的成員
# 對象
res = hasattr(obj,"eye")
print(res)

# 類
res = hasattr(Children,"eat123")
print(res)


# (2)getattr() 獲取對象/類成員的值
# 對象
res = getattr(obj,"weight")
print(res)
# 如果獲取的值不存在,可以設置第三個參數,防止報錯
res = getattr(obj,"weight123","抱歉這個值不存在")
print(res)

# 類
# 通過類進行反射 (反射出來的是普通方法)
func = getattr(Children,"drink")
print(func)
func(1)
# 通過對象進行反射 (反射出來的是綁定方法)
func = getattr(obj,"drink")
print(func)
func()

# 綜合案例
strvar = "eat11"
if hasattr(obj,strvar):
?? ?func = getattr(obj,strvar)
?? ?func()
else:
?? ?print("抱歉,該成員不存在")


# (3) setattr() 設置對象/類成員的值
# 對象
setattr(obj,"skin","黑人")
print(obj.skin)
# 類
setattr(Children,"skin","土耳其人")
print(Children.skin)
print(obj.skin)

# (4) delattr() 刪除對象/類成員的值?
# 對象
# delattr(obj,"skin")
# print(obj.skin)

# 類
# delattr(Children,"skin")
# print(Children.skin)

# ### part2 通過字符串反射模塊中的成員
"""
sys.modules 返回一個系統字典,字典的鍵是加載的所有模塊
'__main__': <module '__main__' from '/mnt/hgfs/python32_gx/day25/2.py'>
字典中的__main__這個鍵對應的是該文件的模塊對象;
"""

def func1():
?? ?print("我是func1方法")
def func2():
?? ?print("我是func2方法")
def func3():
?? ?print("我是func3方法")

import sys
print(sys.modules) # 系統字典
module = sys.modules["__main__"]
print(module)
res = getattr(module,"func1")
print(res)

# 綜合案例 : (通過字符串反射模塊中的成員)
while True:
?? ?strvar = input("請輸入你想要使用的功能:")
?? ?if hasattr(module,strvar):
?? ??? ?func = getattr(module,strvar)
?? ??? ?func()
?? ?elif strvar.upper() == "Q":
?? ??? ?print("再見")
?? ??? ?break
?? ?else:
?? ??? ?print("沒有該成員~!")

### 裝飾器(decorator)

```
定義:裝飾器用于拓展原來函數功能的一種語法,返回新函數替換舊函數
優點:在不更改原函數代碼的前提下 給函數拓展新的功能
```

### 方法的分類

```
普通方法: ?沒有任何參數傳遞,只能類調用
綁定方法: ?把默認傳參的方法叫做綁定方法,綁定到對象(默認傳對象),綁定到類(默認傳類)
非綁定方法:靜態方法 (無需傳任何參數,對象和類都能調用)
```
### property
```
用property類裝飾器,修飾的方法,變為描述符
效果:把類中方法變為屬性使用,用來控制描述符的獲取,設置,刪除
```
### 與類相關的魔術屬性
```
# __dict__ 獲取對象或類的內部成員結構
# __doc__ ?獲取對象或類的內部文檔
# __name__ 獲取類名函數名
# __class__ 獲取當前對象所屬的類
# __bases__ 獲取一個類直接繼承的所有父類,返回元組
```
### 反射
```
# 概念:通過字符串去操作類對象 或者 模塊中的屬性方法
# (1)類中的反射
#hasattr() 檢測對象/類是否有指定的成員
#getattr() 獲取對象/類成員的值
#setattr() 設置對象/類成員的值
#delattr() 刪除對象/類成員的值?

# (2)模塊的反射
sys.modules 返回一個系統字典,字典的鍵是加載的所有模塊

```

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910558.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910558.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910558.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【自動鼠標鍵盤控制器|支持圖像識別】

[軟件名稱]: 電腦圖像識別 [軟件大小]: 57.2 MB [下載通道]: 夸克盤 | 迅雷盤 &#x1f3ae;【自動鼠標鍵盤控制器&#xff5c;支持圖像識別】基于Python開發的智能自動化工具 輕量便捷的自動化操作工具&#xff0c;集成圖像識別、鼠標控制、鍵盤模擬等功能&#xff0c;輕松…

ISO/IEC 8824規范實際應用案例

案例 1&#xff1a;X.509 數字證書&#xff08;互聯網安全基石&#xff09; 標準依據&#xff1a;RFC 5280 (基于 ASN.1 定義) 核心應用&#xff1a; Certificate :: SEQUENCE {tbsCertificate TBSCertificate, -- 證書主體signatureAlgorithm AlgorithmIdentifier,…

QT6工程各種路徑詳解

一.當前工作目錄 1.獲取方法&#xff1a; #include <QDir> qDebug() << "當前工作目錄&#xff1a;" << QDir::currentPath(); 打印結果&#xff1a; 當前工作目錄&#xff1a; "D:/2.QT/test/test_console/build/QT6_8_2_64_MSVC-Release&…

1931. 用三種不同顏色為網格涂色

1931. 用三種不同顏色為網格涂色 mod_value 10**9 7 class Solution:def colorTheGrid(self, m: int, n: int) -> int:# 1、預處理所有合法的單行涂色方案# 存儲 3^i&#xff0c;用于快速計算顏色編碼的每一位&#xff08;類似位運算&#xff09;# [3^0, 3^1, 3^2, ...,…

整數的輸入輸出

整數的輸入輸出 兩種形式輸出&#xff1a;&#xff08;以int為界&#xff09; char、short、int都用 %dlong 和long long都用 %ld %d char、short、int%ld long long long%u unsignde%lu unsignde long long 整數的格式化輸出示例 #include <stdio.h> int main(){cha…

【llm實戰】Python打造BGE模型微調服務實戰指南

1. 引言:為何需要BGE模型微調?定制化語義的力量 BGE(BAAI General Embedding)是由北京智源人工智能研究院(BAAI)發布的通用文本嵌入模型系列,因其在中英文任務上的優異表現而廣受歡迎,尤其是在MTEB(Massive Text Embedding Benchmark)等權威榜單上名列前茅。 盡管通…

代碼分析與自動化重構

PS&#xff1a;根據過去編寫 Modernizing 相關的開源工具里&#xff0c;編寫的《代碼分析與自動化重構》指南。 遺留系統的現代化演進是一門藝術。在日常的軟件開發里&#xff0c;我們經常會遇到一系列的問題&#xff1a; 如何解決人類智商不夠的問題&#xff1f;模式、原則和…

【android bluetooth 框架分析 04】【bt-framework 層詳解 8】【DeviceProperties介紹】

前面我們提到了 藍牙協議棧中的 Properties &#xff0c; 這篇文章是 他的補充。 【android bluetooth 框架分析 04】【bt-framework 層詳解 6】【Properties介紹】 1. 設計初衷與核心問題 1. 為什么要設計 DeviceProperties&#xff1f; 在 Android 藍牙實際使用中&#x…

華為OD-2024年E卷-字母組合[200分] -- python

問題描述&#xff1a; 每個數字對應多個字母&#xff0c;對應關系如下&#xff1a; 0&#xff1a;a,b,c 1&#xff1a;d,e,f 2&#xff1a;g,h,i 3&#xff1a;j,k,l 4&#xff1a;m,n,o 5&#xff1a;p,q,r 6&#xff1a;s,t 7&#xff1a;u,v 8&#xff1a;w,x 9&#xff1…

機器學習競賽中的“A榜”與“B榜”:機制解析與設計深意

在Kaggle、天池等主流機器學習競賽平臺上&#xff0c;“A榜”&#xff08;Public Leaderboard&#xff09;和“B榜”&#xff08;Private Leaderboard&#xff09;是選手們最關注的指標。但很多新人對兩者的區別和設計意圖感到困惑。本文將深入解析其差異及背后的邏輯。 &#…

云徙科技 OMS:讓訂單管理變得輕松又高效

在如今這個線上線下購物融合得越來越緊密的時代&#xff0c;企業要是想在競爭激烈的市場里站穩腳跟&#xff0c;訂單管理這一塊可得好好下功夫。云徙科技的 OMS&#xff08;訂單管理系統&#xff09;就像是給企業量身打造的一把“金鑰匙”&#xff0c;能幫企業把訂單管理得井井…

qt常用控件--02

文章目錄 qt常用控件--02toolTip屬性focusPolicy屬性styleSheet屬性補充知識點按鈕類控件QPushButton 結語 很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 今天我們進一步c11中常見的新增表達 作者&…

P3258 [JLOI2014] 松鼠的新家

題目描述 松鼠的新家是一棵樹&#xff0c;前幾天剛剛裝修了新家&#xff0c;新家有 n n n 個房間&#xff0c;并且有 n ? 1 n-1 n?1 根樹枝連接&#xff0c;每個房間都可以相互到達&#xff0c;且倆個房間之間的路線都是唯一的。天哪&#xff0c;他居然真的住在“樹”上。 …

基于openfeign攔截器RequestInterceptor實現的微服務之間的夾帶轉發

需求&#xff1a; trade服務需要在下單后清空購物車 分析&#xff1a; 顯然&#xff0c;清空購物車需要調用cart服務&#xff0c;也就是這個功能的實現涉及到了微服務之間的轉發。 其次&#xff0c;清空購車還需要userId&#xff0c;所以需要使用RequestInterceptor來實現夾…

w~深度學習~合集9

我自己的原文哦~ https://blog.51cto.com/whaosoft/14010384 #UPSCALE 這里設計了一個通用算法UPSCALE&#xff0c;可以剪枝具有任意剪枝模式的模型。通過消除約束&#xff0c;UPSCALE將ImageNet精度提高2.1個點。 paper地址&#xff1a;https://arxiv.org/pdf/2307.08…

python如何刪除xml中的w:ascii屬性

可以使用Python的xml.etree.ElementTree模塊通過以下步驟刪除XML中的w:ascii屬性&#xff1a; import xml.etree.ElementTree as ET# 原始XML片段&#xff08;需包含命名空間聲明&#xff09; xml_str <w:rPr xmlns:w"http://schemas.openxmlformats.org/wordproces…

【React】React CSS 樣式設置全攻略

在 React 中設置 CSS 樣式主要有以下幾種方式&#xff0c;各有適用場景&#xff1a; 1. 內聯樣式 (Inline Styles) 直接在 JSX 元素中使用 style 屬性&#xff0c;值為 JavaScript 對象&#xff08;使用駝峰命名法&#xff09; function Component() {return (<div style…

JS紅寶書筆記 8.2 創建對象

雖然使用Object構造函數或對象字面量可以方便地創建對象&#xff0c;但這些方式有明顯不足&#xff1a;創建具有同樣接口的多個對象需要重復編寫很多代碼 工廠模式可以用不同的參數多次調用函數&#xff0c;每次都會返回一個新對象&#xff0c;這種模式雖然可以解決創建多個類…

高通camx hal進程dump日志分析三:Pipeline DumpDebugInfo原理分析

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: 目錄 一、問題背景 二、DumpDebugInfo原理 2.1:我們分析下代碼 2.2 :Pipeline Dump debug info 2.3 :dump Metadata Pending Node信息 2.4 :Dump Metadata Pool Debug信息 2.5 :No…

【數據結構】_二叉樹基礎OJ

目錄 1. 單值二叉樹 1.1 題目鏈接與描述 1.2 解題思路 1.3 程序 2. 相同的樹 2.1 題目鏈接與描述 2.2 解題思路 2.3 程序 3. 對稱二叉樹 3.1 題目鏈接與描述 3.2 解題思路 3.3 程序 1. 單值二叉樹 1.1 題目鏈接與描述 題目鏈接&#xff1a; 965. 單值二叉樹 - 力…