看完篇你就可以飄起來了
一:例項化過程:
例項化:其實就是以people類為模版,在記憶體裡開闢一塊空間,存上資料,賦值成乙個變數名
class people(object):
def __init__(self, name, ***='f'):
self.name = name
self.*** = ***
def people_name(self):
print('我的名字叫:', self.name)
people = people('范冰冰') # 例項化這個類,此時的people就是類people的例項化物件
people.people_name()
看完以上**回答三個問題:1.為什麼有__init__ ????2.__init__(self)裡面為什麼有self ????3.__init__(self):中self.name=name,這個self做什麼 ????
4.方法def people_name(self):中self做什麼 ????
靜靜的看完下面的內容,你就回明白了~~
例項化的過程:
其實self,就是例項本身(這裡的self其實就是people)!你例項化時python會自動把這個例項本身通過self引數傳進去。
所以:
初始化乙個角色,就需要呼叫這個類一次:
people1 = people('范冰冰'),生成乙個個體,會自動把引數傳給people下面的__init__(...)方法
people2 = people('李晨')
雖然我們沒有顯性的去呼叫__init__傳值,其實類在呼叫他自己的__init__(…)時,自己幫你給self引數賦值了,
比如:
在記憶體中開闢一塊空間指向people1這個變數名
呼叫people這個類並執行其中的__init__(…)方法,相當於people.__init__(people1,'范冰冰','f'),這樣就把('范冰冰','f')跟people1關聯起來,既然關聯起來了,那麼我們當然可以用prople1.name,prople1.***的方式呼叫了。所以,為實現這種關聯,在呼叫__init__方法時,就必須把r1這個變數也傳進去,否則__init__不知道要把那3個引數跟誰關聯呀。
所以這個__init__(…)方法裡的,self.name = name , self.***= ***就是要把這幾個值存到prople1的記憶體空間裡。
那麼:
people_name(self)方法 為什麼也還需要self引數麼? 不是在初始化角色的時候 ,就已經把角色的屬性跟prople1繫結好了麼?
people = people('范冰冰')
people.people_name() #等價於:people.people_name(people,」范冰冰")
細心的同學可能發現,我們在呼叫方法 people_name(self):時,並沒有給self傳值,假裝不存在,不過python還是會自動的幫你把people賦值給self這個引數,所以啊,你在 people_name(self)方法裡面可以隨意訪問people其他屬性(如:self.name,其實就是是等價於people.name方式去呼叫)
最後:
「例項化」, 就是把乙個虛擬的抽象的類,通過這個動作,變成了乙個具體的物件了, 這個物件就叫做例項
剛才定義的這個類體現了物件導向的第乙個基本特性,封裝,其實就是使用構造方法將內容封裝到某個具體物件中,然後通過物件直接或者self間接獲取被封裝的內容
揭開C 類中虛表的「神秘面紗」
c 類中的虛表結構是c 物件模型中乙個重要的知識點,這裡咱們就來深入分析下虛表的在記憶體中的結構。c 乙個類中有虛函式的話就會有乙個虛表指標,其指向對應的虛表,一般乙個類只會有乙個虛表,每個虛表有多個 插槽 每個插槽存放乙個虛函式的位址。插槽中的內容可以被覆蓋,子類如果重寫了父類中的虛函式,則插槽中...
TF IDF的神秘面紗
tf idf演算法 可以評估一字詞對於乙個檔案集或乙個語料庫中的其中乙份檔案的重要程度。字詞的重要性隨著它在檔案 現的次數成正比增加,但同時會隨著它在語料庫 現的頻率成反比下降。主要思想是 如果某個詞或短語在一篇文章 現的頻率tf高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力...
掀開c 中this指標的神秘面紗
我們都知道類的不同例項都可以呼叫成員函式,那麼成員函式如何知道哪個例項要被操作呢,原因在於每個物件都擁有乙個指標 this指標,通過this指標來訪問自己的位址。include using namespace std class date private int year int month int...