day23:類的名稱空間和組合
1,類屬性:靜態屬性,方法:動態屬性;雙下init方法,每當我們呼叫類的時候就會自動的觸發這個方法,預設傳self,在init方法裡面可以對self賦值;在類的內部,self就是一個物件,我們自己例項化的物件是類外部的物件
2,Python入門,給你一個需求,能翻譯成Python語言,就入門了;面向物件入門,當你見到一個需求,能分析出這個問題是否適合用面向物件解決,如果適合,能有一些想法,怎麼設計這個類,有幾個屬性,方法等等
3,一定要選好最適合的程式設計方式,不是所有的都適合用面向物件來解決的,面向物件只是一種程式設計思想,並沒有高階低端之分。
4,是否可以用物件名來呼叫靜態屬性呢?可以的
5,類中的函式名和物件,最終都是一個名字而已,都是一個記憶體地址。定義了一個類以後,會建立一個這個類名的名稱空間,在這個空間內,放名字
6,有了物件一定可以找到類(類物件指標),有了類找不到物件,單線聯絡,物件自己的空間裡面沒有的時候,回去類的空間裡面找
class Course: language = 'Chinese' def __init__(self,teacher,course_name,period,price): self.teacher = teacher self.name = course_name self.period= period self.price = price def func(self): pass linux = Course('lisa','linux',6,20000) linux.language = "japanese" # 這個是給物件新添加了一個屬性
print(linux.__dict__)
del linux.language #刪除這個屬性 Course.language = 'English' # 這個是修改了雷屬性 print(Course.__dict__) # {'teacher': 'lisa', 'name': 'linux', 'period': 6, 'price': 20000, 'language': 'japanese'}# {'__module__': '__main__', 'lan
7,對於靜態屬性不可變資料型別來說,類變數最後用類名來操作,用物件來操作的話,只不過給物件添加了新的屬性;對於可變資料型別,可以用物件和類的索引來操作
8,繫結方法,這個物件提供的所有的資料,這個方法都可以去呼叫了,這種情況下,才產生了繫結方法。繫結的意思其實就是把這個物件當做self傳進去了,也有非繫結方法,目前我們還沒有見到。
def func():pass class Foo(): def func(self): print('func') f1 = Foo() # 列印記憶體地址 print(func) print(Foo.func) print(f1.func) print(f1) # <function func at 0x103bfa840> # <function Foo.func at 0x103bfa6a8> # <bound method Foo.func of <__main__.Foo object at 0x103b2f390>> # <__main__.Foo object at 0x1044ac390> # 這個函式是這個類的繫結方法
9,物件找名字的時候,如果類裡面沒有,是不可以找全域性的的,最高找到類。類裡面就是一個獨立的,他不能一級一級網上找了
10,import一個包,相當於類的例項化過程,後面的點呼叫,類似於物件訪問方法,訪問屬性。
11,類的特性:面向物件的三大特性:繼承,多型和封裝
12,一種類裡面的用法,組合,這個我們其實一直在用,只不過不知道他就叫做組合。