開發與維運

屬性和方法 | Python從入門到精通:高階篇之二十三

查看上一節:類的定義

類的屬性和方法

問:為什麼實例可以訪問到類中的屬性和方法?
答:類中定義的屬性和方法都是公共的,任何該類實例都可以訪問。

屬性和方法查找的流程

當我們調用一個對象的屬性時,解析器會先在當前對象中尋找是否含有該屬性,如果有,則直接返回當前的對象的屬性值;

如果沒有,則去當前對象的類對象中去尋找,如果有則返回類對象的屬性值,如果沒有則報錯!

class Person :
    name = 'swk' 

    def say_hello(self) :
         print('你好!')

p1 = Person()
p2 = Person()

# 修改p1的name屬性
p1.name = 'zbj'

print(p1.name)
print(p2.name)

執行結果為:p1的name是zbj,而p2的name是swk:
image.png
此時在內存中的變化:
image.png

類對象和實例對象中都可以保存屬性(方法)

如果這個屬性(方法)是所有的實例共享的,則應該將其保存到類對象中;
如果這個屬性(方法)是某個實例獨有,則應該保存到實例對象中。
一般情況下,屬性保存到實例對象中,而方法保存到類對象中。

設置新需求:say_hello()可以打印:“你好!我是 xxx”

上面講過:方法每次被調用時,解析器都會自動傳遞第一個實參,其實第一個參數,就是調用方法的對象本身。示例代碼和註釋如下:

class Person :
    name = 'swk' 
    def say_hello(self) :
        #   如果是p1調的,則第一個參數就是p1對象
        #   如果是p2調的,則第一個參數就是p2對象
        # 一般我們都會將這個參數命名為self
      '''
say_hello()這個方法,可以顯示如下格式的數據:
       你好!我是 xxx
注意:在方法中不能直接訪問類中的屬性,此處只寫name是會報錯的,所以要通過`self.name`的形式:
     '''
        print('你好!我是 %s' %self.name)

# 創建Person的實例
p1 = Person()
p2 = Person()

# 修改p1的name屬性
p1.name = '豬八戒'
p2.name = '沙和尚'

p1.say_hello() # '你好!我是 豬八戒'
p2.say_hello() # '你好!我是 沙和尚'

執行結果為:
image.png
這就完成了上述需求!

點擊查看配套視頻教程

獲取更多內容請訂閱Python學習站官方技術圈!

Leave a Reply

Your email address will not be published. Required fields are marked *