1.1 class
用法
instance.__class__
描述
獲取實例所屬類。為實例屬性。
示例
>>> class MyClass:pass
>>> c1=MyClass()
>>> c1
<__main__.MyClass object at 0x03D19C50>
# __class__ 返回實例所屬類
>>> c1.__class__
# 用返回的類創(chuàng)建實例對象
>>> c2=c1.__class__()
>>> c2
<__main__.MyClass object at 0x03D19CF0>
1.2 class.name
用法
instance.__class__.__name__
描述
獲取實例所屬類的名字。返回字符串。
示例
>>> class MyClass:pass
>>> c1=MyClass()
>>> c1=MyClass()
# __name__ 返回實例所屬類的名字
>>> c1.__class__.__name__
'MyClass'
1.3 bases
用法
類.__bases__
描述
返回該類的直接超類組成的元組
示例
>>> class MyClass:pass
>>> class MyClassA(MyClass):pass
>>> class MyClassB():pass
# __bases__ 返回直接超類組成的元組
>>> MyClassC.__bases__
(, )
1.4 dict
類和實例的屬性字典。
實例無本身屬性則為空。
>>> class MyClass:
s='梯閱線條'
def f1(self):pass
>>> c1=MyClass()
# __dict__ 查看類的屬性字典,
# 前后帶雙下劃線的為內(nèi)置屬性 , 其他為自定義屬性
>>> MyClass.__dict__.keys()
dict_keys(['__module__', 's', 'f1', '__dict__', '__weakref__', '__doc__'])
>>> c1.__dict__.keys()
dict_keys([])
>>> c1.a=9555
>>> c1.__dict__.keys()
dict_keys(['a'])
>>> c1.s='tyxt'
# __dict__ 查看實例的屬性字典,
# 只返回實例賦值的屬性,不返回類的屬性
>>> c1.__dict__.keys()
dict_keys(['a', 's'])
>>> MyClass.__dict__.keys()
dict_keys(['__module__', 's', 'f1', '__dict__', '__weakref__', '__doc__'])
1.5 _X
python類內(nèi)定義的_X:
(1)單下劃線開頭的變量名,_X通常在工具類中用于避免與子類的命名沖突。
比如,子類繼承了一個工具類,然后定義了一個同名變量,那么會取到子類的變量,而實際想使用工具類里面的變量。此時,在工具類通過單下劃下命名變量,可以很大程度上避免沖突。
(2)_X一般只在類內(nèi)調(diào)用,不在類外調(diào)用。
1.6 __X
python類內(nèi)定義的__X
(1) 雙下劃線開頭的變量名,__X為偽私有類屬性。
(2) 自動在*_X前面加“*類名”。
示例
>>> class MyClass:
def me1(self):pass
def _me2(self):pass
def __me3(self):pass
>>> [x for x in dir(MyClass) if not x.endswith('__')]
['_MyClass__me3', '_me2', 'me1']
1.7 getattr()
用法
getattr(object, name[, default])
描述
返回對象的屬性值。
obejct:對象(類對象或?qū)嵗龑ο螅?/p>
name:屬性名的字符串
default:不存在屬性時返回的默認值,不存在屬性未給默認值則報錯
示例
>>> class MyClass:
s='梯閱線條'
def f1(self):
print('f1')
# getattr 第一個參數(shù)為 對象 object
# 第二個參數(shù)為 字符串屬性名
# 返回數(shù)據(jù)屬性值
>>> getattr(MyClass,'s')
'梯閱線條'
# 返回行為屬性值
>>> getattr(MyClass,'f1')
1.8 示例-優(yōu)化顯示
通過內(nèi)省工具getattr()和 class .name 動態(tài)顯示屬性值。
文件
myclasstools.py
class ShowAttr:
def collectAttrs(self):
attrs = []
for k in sorted(self.__dict__):
attrs.append('{}={}'.format(k,getattr(self,k)))
return ','.join(attrs)
def __str__(self):
return '{}:{}'.format(self.__class__.__name__,self.collectAttrs())
myperson.py
from myclasstools import ShowAttr
class MyPerson(ShowAttr):
def __init__(self,name,job = None,pay = 0):
self.name = name
self.job = job
self.pay = pay
def payraise(self,rate):
self.pay = int(self.pay * (1 + rate))
#def __str__(self):
#return 'MyPerson:name={0.name},job={0.job},pay={0.pay}'.format(self)
class MyManager(MyPerson):
def __init__(self,name,job = 'mgr',pay = 0):
MyPerson.__init__(self,name,job,pay)
def payraise(self,rate,bonus=0.1):
MyPerson.payraise(self,rate+bonus)
if __name__ == '__main__':
mp1 = MyPerson('mp1')
mp2 = MyPerson('mp2','c++開發(fā)',20000)
mm1 = MyManager('mm1','開發(fā)經(jīng)理',50000)
print(mp1)
print(mp2)
print(mm1)
mp2.payraise(0.1)
mm1.payraise(0.1)
print(mp2)
print(mm1)
執(zhí)行
E:\\documents\\F盤>python myperson.py
MyPerson:job=None,name=mp1,pay=0
MyPerson:job=c++開發(fā),name=mp2,pay=20000
MyManager:job=開發(fā)經(jīng)理,name=mm1,pay=50000
MyPerson:job=c++開發(fā),name=mp2,pay=22000
MyManager:job=開發(fā)經(jīng)理,name=mm1,pay=60000
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
編程
+關(guān)注
關(guān)注
90文章
3716瀏覽量
97191 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90041
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
使用Rust優(yōu)化Python性能
在數(shù)據(jù)分析領(lǐng)域Python無疑是最流行的編程語言,但是Python有一個硬傷就是作為一個編譯語言在性能上有些微的欠缺。而同樣最流行的語言Rust則在性能方面表現(xiàn)優(yōu)秀。本文我們一起學習一個優(yōu)化項目的實踐,對一個數(shù)據(jù)分析程序,改為R
Python性能優(yōu)化
Python性能優(yōu)化的20條建議2016-07-05 17:38 1、優(yōu)化算法時間復雜度 算法的時間復雜度對程序的執(zhí)行效率影響最大,在Python中可以通過選擇合適的數(shù)據(jù)結(jié)構(gòu)來
發(fā)表于 10-10 10:31
?0次下載
Python應用與優(yōu)化所必備的6個基本庫
無論你是想快速入手Python還是想為Python應用程序構(gòu)建本地UI,亦或者對Python代碼進行優(yōu)化,本文列舉的6個庫,都有可能會幫到你。 由于具有易于使用的優(yōu)勢,
發(fā)表于 11-15 11:40
?3009次閱讀
解析c++語言的Qt內(nèi)省機制
所謂 內(nèi)省 是指面向?qū)ο笳Z言的一種在運行期間查詢對象信息的能力, 比如如果該語具有運行期間檢查對象型別的能力,那么我們稱它是型別 內(nèi)省 (type intropection)的,型別 內(nèi)省 可以用
發(fā)表于 12-15 10:22
?1675次閱讀
Python 3.8.1有什么新功能和優(yōu)化
距離 Python 3.8.1 rc1發(fā)布沒多久的時間,目前,Python 3.8.1 也已正式發(fā)布。Python 3.8.1是Python 3.8的第一個維護版本,
介紹python列表的邊界和嵌套
本文介紹python列表的邊界和嵌套。只能訪問python列表范圍內(nèi)的項,python列表可以嵌套python列表。
優(yōu)化Python代碼有哪些工具
Python是一種強大的編程語言,但在面對復雜項目和緊迫的時間要求時,提高Python的使用效率變得至關(guān)重要。為此,以下是詳細介紹十大工具,它們可以幫助您加速開發(fā)流程、提高編程體驗并優(yōu)化
python有什么用 如何用python創(chuàng)建數(shù)據(jù)庫
python有什么用 如何用python創(chuàng)建數(shù)據(jù)庫 Python是一種高級編程語言,可以用于開發(fā)各種類型的應用程序和工具。它的廣泛應用使它在編程領(lǐng)域中極為受歡迎。
python shell怎么用
Python Shell是一種交互式解釋器,可以通過命令行直接運行Python代碼。在Shell中,可以輸入一行代碼并立即得到結(jié)果,非常適合于測試、嘗試新代碼或進行簡單的任務。本文將詳細介紹
python用內(nèi)省優(yōu)化顯示介紹
評論