查看上一節:類的定義
類的屬性和方法
問:為什麼實例可以訪問到類中的屬性和方法?
答:類中定義的屬性和方法都是公共的,任何該類實例都可以訪問。
屬性和方法查找的流程
當我們調用一個對象的屬性時,解析器會先在當前對象中尋找是否含有該屬性,如果有,則直接返回當前的對象的屬性值;
如果沒有,則去當前對象的類對象中去尋找,如果有則返回類對象的屬性值,如果沒有則報錯!
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:
此時在內存中的變化:
類對象和實例對象中都可以保存屬性(方法)
如果這個屬性(方法)是所有的實例共享的,則應該將其保存到類對象中;
如果這個屬性(方法)是某個實例獨有,則應該保存到實例對象中。
一般情況下,屬性保存到實例對象中,而方法保存到類對象中。
設置新需求: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() # '你好!我是 沙和尚'
執行結果為:
這就完成了上述需求!
點擊查看配套視頻教程
獲取更多內容請訂閱Python學習站官方技術圈!