27.2-類定義和初始化

“人生最尊貴的事是什么?”
人生最尊貴的事情就是面對別人的虛偽與不義,仍能保持自己對別人的親切!

要學會容忍人家,人家沒有修,人家是凡人,你是有修的人,你是一個圣人,你是假我,別把你當成真的。人的修養(yǎng)是靠什么讓人家來尊敬的?就是語言,行為。為什么叫修心修行,就是一個語言,一個行為,心里的行為。

總結:

  1. 每一次實例化都會產生完全不同的對象,內存地址相同只能當巧合,不能當真
  2. _init_ 方法中,默認必須是 return None

1.Python的類

class ClassName:

  1. 必須使用class關鍵字
  2. 類名必須是用大駝峰命名
  3. 類定義完成后,就產生了一個類對象,綁定到了標識符ClassName上
def add(x,y):
    return x+y

class Person:   # 類對象(非類的對象,注意區(qū)分)
    pass


class MyClass:
  """A example class"""    # #__doc__
  x = 'abc' # 類屬性
  def foo(self): # 類屬性foo,也是方法(看做函數(shù))
# 本質上 x  foo  都是類屬性
    return 'My Class'
print(MyClass.x)
print(MyClass.foo)
print(MyClass.__doc__)
#-------------------------------------------------
abc
<function MyClass.foo at 0x000002406FCCD048>
A example class

總結:
1. 方法是可以加 括號 調用的,

2.類對象及類屬性和方法

類對象,類的定義就會生成一個類對象
類的屬性,類定義中的變量和類中定義的方法都是類的屬性
類變量,上例中x是類MyClass的變量
類的私有屬性:雙下劃綫開頭,或但下滑線開頭;
MyClass中,x、foo都是類的屬性, doc 也是類的屬性

foo方法是類的屬性,如同 吃 是人類的方法,但是每一個具體的人才能吃東西,也就是說 吃 是人的實例才能調用的方法。
foo是方法對象method,不是普通的函數(shù)對象functions了,它一般要求至少有一個參數(shù),第一個參數(shù)是self(self只是個慣用標識符,可以換名字),這個參數(shù)位置就留給了self。

self 指代當前實例本身

類屬性與方法:

類的私有屬性
private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時 self.private_attrs。

類的方法
在類地內部,使用 def 關鍵字來定義一個方法,與一般函數(shù)定義不同,類方法必須包含參數(shù) self,且為第一個參數(shù),self 代表的是類的實例。
self 的名字并不是規(guī)定死的,也可以使用 this,但是最好還是按照約定是用 self。

類的私有方法
private_method:兩個下劃線開頭,聲明該方法為私有方法,只能在類的內部調用 ,不能在類地外部調用。self.private_methods。

3.構造函數(shù)(初始化)

  • 很多類都傾向于將對象創(chuàng)建為有初始狀態(tài)的。因此類可能會定義一個名為 init() 的特殊方法(構造方法),像下面這樣:


  • 類定義了 init() 方法的話,類的實例化操作會自動調用 init() 方法。所以在下例中,可以這樣創(chuàng)建一個新的實例:


  • 當然, init() 方法可以有參數(shù),參數(shù)通過 init() 傳遞到類的實例化操作上。例如:


類的實例化與初始化

self代表類的實例,而非類

實例化 Class()

每一次實例化只能生成該類的具體實例,
每一次實例化都會產生完全不同的對象,內存地址相同只能當巧合,不能當真

a = MyClass() # 實例化,相當于對類進行調用;

使用上面的語法,在類對象名稱后面加上一個括號,就調用類的實例化方法,完成實例化。
實例化就真正創(chuàng)建一個該類的對象(實例)。例如

tom = Person()
jerry = Person()

上面的tom、jerry都是Person類的實例,通過實例化生成了2個實例。

每次實例化后獲得的實例,是不同的實例,即使是使用同樣的參數(shù)實例化,也得到不一樣的對象。

Python類實例化后,會自動調用 init 方法。這個方法第一個參數(shù)必須留給self,其它參數(shù)隨意。(特殊方法)

初始化 _init_方法

MyClass()實際上調用的是 init(self) 方法,可以不定義,如果沒有定義會在實例化后隱式調用
作用:對實例進行初始化

class MyClass:
    def __init__(self):
        print('init')
print(MyClass) # 不會調用
print(MyClass()) # 調用__init__
a = MyClass() # 調用__init__
print(a)
#-------------------------------------------------
<class '__main__.MyClass'>
init
<__main__.MyClass object at 0x000002406FCB8E10>
init

# 每一次的調用都不同;
class Person:
    def __init__(self):
        print('init',id(self))
print(Person) #不會調用  
print('-'*30)
tom = Person()  #實例化
print(tom,hex(id(tom)))
jerry = Person()   # 調用init
print(jerry,hex(id(jerry)))
#----------------------------------------------------------------------------------------------------
<class '__main__.Person'>
------------------------------
init 2475813918872
<__main__.Person object at 0x0000024072025898> 0x24072025898
init 2475813859224
<__main__.Person object at 0x0000024072016F98> 0x24072016f98

#初始化 相當于 傳參數(shù);


class Person:
    def __init__(self, name, age):
        print('init',hex(id(self)))
        self.name = name
        self.age = age
print(Person)
tom = Person('Tom', 20) # 實例化,會調用__init__方法并為實例進行屬性的初始化
jerry = Person('Je', 25)
print(tom,jerry)
print(tom.name,jerry.name)
print(tom.age,jerry.age)
#--------------------------------------------------
<class '__main__.Person'>
init 0x2407202a710
init 0x2407202a9b0
<__main__.Person object at 0x000002407202A710> <__main__.Person object at 0x000002407202A9B0>
Tom Je
20 25

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,137評論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,641評論 1 32
  • 還來不及擁抱晨曦,就已經(jīng)手握黃昏,一天匆匆而過; 還來不及細品春天的殷紅竇綠,就已經(jīng)滿眼肅穆的銀裝素裹,一年匆匆而...
    萬兒閱讀 305評論 0 2
  • 陸羽(733年--804年),字鴻漸,一名疾,字季疵,號竟陵子、桑苧翁、東岡子,唐復州竟陵(今湖北天門)人。一生嗜...
    賽德傳播閱讀 2,090評論 0 0

友情鏈接更多精彩內容