python--類和物件
阿新 • • 發佈:2019-02-03
類 : 具有相同的屬性和方法的物件的集合 .它定義了該集合中每個物件所共有的屬性和方法。
物件: 萬物皆物件.
類和物件的關係 : 類是物件的模板; 物件是類的例項.
語法:
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.第一個單詞首字母小寫其餘的單詞首字母大寫
不要去用關鍵字