Python類之類的成員


對於一個學C++的朋友來說,Python類中,哪些是私有成員,哪些是共有成員,估計一直傻傻分不清。

一、本篇博客要解決的問題:

Python類中,哪些是私有成員?哪些是共有成員?

二、 關於Python的類

要想了解Python的類,就必須認識到,當你在Python中寫了一個類的時候,你就已經構建了一個新的類型。

所以,你寫的類型其本身有屬性和方法,而類型對應的實例,也有自己的屬性,不過並沒有方法。

也就是說,Python中的類,實際上有兩層含義,第一層是類本身,第二層是實例。

類型本身有屬性和方法,類的屬性可以在所有實例中傳遞,類的方法用來處理實例的數據。

實例本身只有屬性,沒有方法,屬性就是要被類的方法所處理的數據。

Python通過class語句定義一個類,通過__init__(self, *para)構造一個實例,並通過__del__(self)來解構。class是類,self是實例。

三、解決問題。

了解了上面所說的類和實例之后,你可能就已經明白了。Python中類的屬性其實就是共有變量,我們稱之為類的變量,類的變量可以在所有實例中間傳遞。而實例的屬性則可以大致看成是私有變量,但其實這並不是嚴格意義上的私有變量,因為我們依然可以通過instance.property來訪問並修改這些屬性。綜上所述:Python中,類的成員,有兩種。

1、類成員。可以通過Class.property來調用,也可以通過instance.property來調用,該屬性可以在所有實例中傳遞

2、實例的成員。只能通過instance.property來調用,該屬性不與其他實例共享。

3、注意,類的self相當於C++中的指針,但是也有所不同,因為self只指示該實例的數據,不指示類的屬性和方法。所以當你需要在類的方法中調用類的屬性或者類的其他方法的時候,你需要用類名或者self來指明。但是用類名和用self來指明時,結果是不一樣的。詳情請見四中的實例代碼

四、示例代碼

# -*- coding: utf-8 -*-
# author: zxr
# time: 2019-04-10
# functionality: test class

class TestClass:
    val = 0
    def __init__(self, v):
        self.val1 = v

    def show(self):
        print ('-'*60)
        print (self.val1)

    def add_using_classname(self):
        self.val1 += TestClass.val
        TestClass.show(self)
    
        # below code is unvalid
        # self.val1 += val
        # show()

    def add_using_self(self):
        self.val1 += self.val
        self.show()

    

if __name__ == '__main__':
    tc = TestClass(1)
    tp = TestClass(10)
    print (TestClass.val)
    print (tc.val)
    print (tc.val1)
    print (TestClass.val)
    print (tp.val)
    print (tp.val1)
    print ('-'*60)
    
    TestClass.val = 2
    print ('-'*60)
    print (TestClass.val)
    print (tc.val)
    print (tc.val1)
    print (TestClass.val)
    print (tp.val)
    print (tp.val1)
    print ('-'*60)

    tp.val1 = 3
    tc.val1 = 4
    tp.val = 30
    tc.val = 40
    print ('-'*60)
    print (TestClass.val)
    print (tp.val)
    print (tc.val)
    print (tp.val1)
    print (tc.val1)
    tc.add_using_classname()
    tp.add_using_classname()
    tc.add_using_self()
    tp.add_using_self()
test class

總結:Python中的類與C++中的類是不一樣的。Python中的每實例化一個實例之后,就拷貝了一個該類的副本,對這個實例的任何修改都不會影響到類。同樣的,要想修改類中的屬性,也只能在類中修改,在實例中的修改影響不了其他實例。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM