1. 程式人生 > >python--類和物件

python--類和物件

類 : 具有相同的屬性和方法的物件的集合 .它定義了該集合中每個物件所共有的屬性和方法。

物件: 萬物皆物件.

類和物件的關係 : 類是物件的模板; 物件是類的例項.

語法:

  class   類名:    裡面包含    屬性   和   方法

class Preson:      #     Preson  是類名  可以隨意定義
    def eat(self):
        # " def "為定義方法
        # " eat "函式名-->方法名  可以隨意定義
        # " (   ) "形參列表  形參: 形式列表
        # " self "  第一個引數  預設是當前物件的引用 = 地址指向  可以隨意修改
        print('人在吃飯...')
    def sleep(self):
        print('睡覺就行時...')
if '__main__'.__eq__(__name__):      #代表程式主入口  是從這裡進去的(不寫也可以)
    zhangshan=Preson()   #建立物件(直接用這個)
    zhangshan.eat()    #呼叫物件
    zhangshan.sleep()   #呼叫物件
 #列印結果為:  人在吃飯...
 #             睡覺就行時...

很多類都傾向於將物件建立為有初始狀態的。

      因此類可能會定義一個名為   __init__( )   特殊方法(構造

方法) 

 先生成物件,呼叫此方法,再將物件賦值給引用名

#    __init__() 無參   的方法
class Preson:
    def __init__(self):
        self.name='無名氏'    #這的進行賦值   可生成多個
    def eat(self):
        print(self.name+'人在吃飯...')
    def sleep(self):
        print(self.name+'睡覺就行時...')
Pre=Preson()     #必需先例項化類   然後進行呼叫
Pre.eat() Pre.sleep() #列印為: 無名氏人在吃飯... # 無名氏睡覺就行時... Pre=Preson() Pre.name='張珊' #也可以在和進行賦值 如果同時賦值 這裡具有優先權 執行這 Pre.eat() Pre.sleep() # 列印為: 張珊人在吃飯... # 張珊睡覺就行時...

建議使用下面這種方法(只是建議,因人而異,不強制)

#    __init__() 有參   的方法
class Preson:
    def __init__(self,name,age):
        # self.name 建立一個屬性叫name 並且把形參name 賦值給了name
        self.name=name
        self.age=age
    def eat(self):
        print(self.name+'人在吃飯...')
    def Hello(self):
        print('大家好,我叫'+self.name,'今年',self.age,'歲')
Pre=Preson('張三',18)    #直接在這進行賦值
Pre.eat()
Pre.Hello()
#列印為   張三人在吃飯...
#         大家好,我叫張三 今年 18 歲

重寫的方法:  __str__()

class Preson:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def eat(self):
        print(self.name+'人在吃飯...')
    def Hello(self):
        print('大家好,我叫'+self.name,'今年',self.age,'歲')
    def __str__(self):    #如果在輸入這行程式碼 返回的就 不在是 地址和引用
        # object  所有資料型別的基類  父類
        return 'name:' + self.name + 'age :' + str(self.age)    #返回的是這個
Pre=Preson('張三',18)   
#  如果不輸入所述 程式碼  則列印   地址和物件的引用
print(Pre)
print(str(Pre))
print(Pre.__str__())
#列印都為  <__main__.Preson object at 0x054D0750>
#  如輸入上面所述程式碼   返回的皆是 name:張三age :18

解釋型語言,不需要預定義,在使用前直接宣告就可以(隨時建立,隨時使用):

class Preson:
    def eat(self):
        print(self.name+'人在吃飯...')
    def Hello(self):
        print('大家好,我叫'+self.name,'今年',self.age,'歲')
Pre = Preson()
Pre.name='李四'    #注意程式碼是從頭開始執行 所以需要寫前面
Pre.age=19
Pre.eat()
Pre.Hello()
#列印為:   李四人在吃飯...
#          大家好,我叫李四 今年 19 歲

python的語法特點,沒有絕對,一切靠自覺,見名知意

公有方法 :允許外部呼叫的方法

私有方法  : 不允許外部呼叫的方法  只能在當前類中使用 ,以__開頭__結尾    想調也可以調到

自動銷燬方法: __del__( )   

       當物件沒有引用的時候,或程式結束的時候,程式自動呼叫__del__().

class Preson:
    def eat(self):
        print(self.name+'人在吃飯...')
    def Hello(self):
        print('大家好,我叫'+self.name,'今年',self.age,'歲')
    def __del__(self):   #這是一種辦法  在這輸入程式碼
        print('物件被刪除...')
Pre = Preson()
Pre.name='李四'
Pre.age=19
Pre.eat()
Pre.Hello()
del Pre  #也可以直接在末尾寫
#最後打印出來   李四人在吃飯...
#              大家好,我叫李四 今年 19 歲
#              物件被刪除...

可以測試一個物件有多少個引用: 在頂部寫import sys     末尾寫sys.getrefcount(    )    返回 從 2 開始

import sys   #在頂部寫import 後面接 sys
class Preson:
    def eat(self):
        print(self.name+'人在吃飯...')
    def Hello(self):
        print('大家好,我叫'+self.name,'今年',self.age,'歲')
Pre = Preson()
Pre.name='李四'
Pre.age=19
Pre.eat()
Pre.Hello()
lisi=Pre
print(sys.getrefcount(Pre))     #列印為3   要是沒有引用則預設是2

python:命名規則:

變數命名:數字 、字母  "   _  "(下劃線)

注  :首字母不能是數字

非硬性要求:(規範)   建議

1.習慣性:    下劃線加    _name 

2.駝峰式寫法 :    例:  MyClass

3.第一個單詞首字母小寫其餘的單詞首字母大寫

不要去用關鍵字