點号運算進行屬性繼承搜尋,小括号運算産生執行個體對象,或調用類方法。
1.1 python類class語句
用法
class 類名(超類1,...,超類n):
#等号指派語句
var = 'value'
#def 指派語句
def classmethod(self[,var1,...,varn]):
self.name = var1
pass
描述
(1)子產品導入或執行時,執行class語句生成類對象,并且指派給class的頭部類變量名。
(2)類内頂層指派語句的變量成為類對象屬性,稱為類成員變量。
(3)通過“類名.屬性名”通路類的成員屬性。
(4)類方法第1個參數,通常為self。
檔案
E:\documents\F盤\testclass.py
class MyClass:
s = '梯閱線條'
def setData(self,value):
self.data = value
def display(self):
print(self.data)
if __name__ == '__main__':
print('MyClass={}'.format(MyClass))
print('MyClass.s={}'.format(MyClass.s))
print('MyClass.setData={}'.format(MyClass.setData))
print('MyClass.display={}'.format(MyClass.display))
示例
# 打開cmd,執行下面示例
E:\documents\F盤>python testclass.py
MyClass=<class '__main__.MyClass'>
MyClass.s=梯閱線條
MyClass.setData=<function MyClass.setData at 0x01B3C780>
MyClass.display=<function MyClass.display at 0x01B3C810>
1.2 python執行個體對象和屬性
描述
(1)小括号運算:小括号()調用類對象即:類名(),産生執行個體對象。
(2)點運算:執行個體對象繼承類對象,通過“執行個體名.類屬性”通路類對象屬性。
(3)self:執行個體調用類方法,第一個參數self自動接收執行個體對象,為目前調用的主體。
(4)self:類調用方法,需顯式給self傳遞參數值。
(5)self:類可以産生多個執行個體,類方法通過self差別目前調用的執行個體。
(6)屬性設定:類外通過執行個體名設定屬性,類内通過self設定屬性。
(7)類資料屬性:不可變對象,各自維護互不影響;可變對象,全部執行個體共用,一改全改。
(8)執行個體資料屬性:互相獨立,其他執行個體不可通路。
檔案
E:\documents\F盤\testclass.py
class MyClass:
s = '梯閱線條'
y = [1,2,3]
def setData(self,value):
self.data = value
def display(self):
#類通過self指向目前調用的執行個體
print('display.self.data={}={}'.format(self.data,self))
if __name__ == '__main__':
#類産生多個不同執行個體
c1=MyClass()
c2=MyClass()
print('c1={}'.format(c1))
print('c2={}'.format(c2))
c1.setData('c1')
c2.setData('c2')#類内通過self設定屬性
c1.display()
c2.display()
c2.data='1'#類外通過執行個體名設定屬性
#通過執行個體名調用類方法,自動将目前執行個體傳給self
c2.display()
#通過類名調用類方法,需要顯式給self傳參數
MyClass.display(c2)
#類資料為不可變對象,初始相同
print('c1.s={}'.format(c1.s))
print('c2.s={}'.format(c2.s))
print('MyClass.s={}'.format(MyClass.s))
#類資料為不可變對象,修改後互不影響
c1.s = 'c1s'
c2.s = 'c2s'
MyClass.s = 'MyClass'
print('c1.s={}'.format(c1.s))
print('c2.s={}'.format(c2.s))
print('MyClass.s={}'.format(MyClass.s))
#類資料為可變對象,初始相同
print('c1.y={}'.format(c1.y))
print('c2.y={}'.format(c2.y))
print('MyClass.y={}'.format(MyClass.y))
#類資料為可變對象,修改後互相影響,指向同一個值
c1.y[0] = 'c1y'
c2.y[0] = 'c2y'
MyClass.y[0] = 'MyClassy'
print('c1.y={}'.format(c1.y))
print('c2.y={}'.format(c2.y))
print('MyClass.y={}'.format(MyClass.y))
#類對象新增屬性,類和執行個體都可以通路,因為繼承搜尋
MyClass.MC='b'
print('c1.MC={}'.format(c1.MC))
print('c2.MC={}'.format(c2.MC))
print('MyClass.MC={}'.format(MyClass.MC))
#執行個體新增屬性隻屬于目前執行個體,其他執行個體和類對象無法通路
c1.x='a'
print('c1.x={}'.format(c1.x))
try:
print('c2.x={}'.format(c2.x))
except Exception as e:
print('c2.x={}'.format(e))
try:
print('MyClass.x={}'.format(MyClass.x))
except Exception as e:
print('MyClass.x={}'.format(e))
示例
# 打開cmd,執行下面示例
E:\documents\F盤>python testclass.py
c1=<__main__.MyClass object at 0x0208ADD0>
c2=<__main__.MyClass object at 0x0208AD50>
display.self.data=c1=<__main__.MyClass object at 0x0208ADD0>
display.self.data=c2=<__main__.MyClass object at 0x0208AD50>
display.self.data=1=<__main__.MyClass object at 0x0208AD50>
display.self.data=1=<__main__.MyClass object at 0x0208AD50>
c1.s=梯閱線條
c2.s=梯閱線條
MyClass.s=梯閱線條
c1.s=c1s
c2.s=c2s
MyClass.s=MyClass
c1.y=[1, 2, 3]
c2.y=[1, 2, 3]
MyClass.y=[1, 2, 3]
c1.y=['MyClassy', 2, 3]
c2.y=['MyClassy', 2, 3]
MyClass.y=['MyClassy', 2, 3]
c1.MC=b
c2.MC=b
MyClass.MC=b
c1.x=a
c2.x='MyClass' object has no attribute 'x'
MyClass.x=type object 'MyClass' has no attribute 'x'
本文首發微信公衆号:梯閱線條,
更多内容參考python知識分享或軟體測試開發目錄。