面向物件,類和物件訪問
阿新 • • 發佈:2018-12-24
1,物件的命名規範
按照大駝峰體書寫,每個單詞的開頭大寫:
class Person:
pass
2,在類中描述物件的特徵(屬性)
class Person:
name = '張三'#用變數來描述屬性
sex = 'man'
age = 10
取一個物件(通過呼叫一個類,也稱之為例項化或常建立物件):
obj = Person()
print(obj)
#輸出的內容是一個記憶體地址 : <__main__.Person object at 0x000001FC35FB12E8>
解釋記憶體地址:模組名為main,包含一個Person類,通過Person類產生了物件,
地址為0x000001FC35FB12E8
使用物件的特徵取值:
obj.name
obj.sex
obj.age
#輸出結果為 張三,man,10
3,物件的定義和呼叫
定義類和類中的物件:
class Student:
number = 007
name = '蓋倫'
sex = 'man'
age = 18
stu1 = Student()#相當於呼叫類,會返回一個記憶體地址,因為沒有具體的物件
stu2 = Student()
print(stu1)
print(stu2)
<__main__.Student object at 0x000002567C4B19E8>
<__main__.Student object at 0x000002567C2D9EF0>
每個物件的記憶體地址都是不同的,這是因為在建立物件時,計算機會申請一個記憶體空間,並將物件中的內容
存進去,類也是一樣的,但是id是相同的,這是因為呼叫的是同一個宣告
print(stu1.name)
print(stu2.name)
#返回的值一樣
print(id(stu1.name))
print(id(stu2.name))
#id也是一樣的,因為這是同一份資料
為物件單獨指定屬性:
stu1.name = '趙信'
stu2.name = '鍾無豔'
print (stu1.name)
print (stu2.name)
#最新定義的的屬性優先查詢,這涉及到物件的查詢
每個物件的name屬性都不同,則意味著需要給每個物件單獨指定name
存放物件屬性的位置:
-
一個是物件,因為某些物件的具體屬性不一樣,要存放到物件中
-
另一個是類,因為某些物件的某個屬性全部一樣,直接存放到類中,不需要重新定義
示例:
class Student:
school = "Tsinghua LOL"#一個學校的學生,學校屬性是一樣的
number = '007'
name = '蓋倫'
sex = 'man'
age = 18
獲取一個物件中的內容:
通過dict內建函式,可以獲取一個物件中包含的內容
print(stu1.__dict__) #物件中的內容
print(Student.__dict__) #類中的內容
4,物件的訪問順序
當物件和類中有值時,優先訪問物件中的:
class Car:
c_type = 'Tesla'
color = 'res'
price = 500000
c1 = Car()
c2 = Car()
print(c1.__dict__)
print(c1.c_type)
輸出內容 : {} , Tesla
當物件中需要查詢的內容不存在時,則到類中去訪問:
c1.c_type = '911'
print(c1.c_type)#c1是自定義的
print(c2.c_type)#c2是類中定義的
輸出內容 :911 , Tesla
訪問順序為 物件-->> 類
-
在建立一個類的時候,會產生相應的名稱空間,儲存類中名稱和值繫結的關係
-
物件也一樣