天天看點

python類class語句和執行個體屬性

作者:梯閱線條

點号運算進行屬性繼承搜尋,小括号運算産生執行個體對象,或調用類方法。

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知識分享或軟體測試開發目錄。