(1)類的概述
#一種資料型別,本身不佔記憶體空間;用類建立例項化物件,物件佔記憶體空間#
①設計類
類名:首字母大寫,其他遵循駝峰原則
屬性:行為(方法/功能):
例: 類名:wife
屬性:*** age height weight facevalue
行為:做飯 洗衣服 拖地
②類格式
class 類名(父類列表):
屬性行為 object:基類,超類,所有類的父類
例:class person(object):
#定義屬性
name=""
age=0
height=0
#方法def run(self):
print("run")
def eat(self,food):
print("eat"+food)
③例項化物件
物件命=類名(引數列表) 沒有引數小括號也不能省略
④訪問物件的屬性,方法
格式:物件名.屬性名
賦值:物件名.屬性名=新值
修改屬性值:1.直接修改屬性的值
2.通過方法修改屬性的值
3.通過方法對屬性的值進行遞增
格式:物件名.方法名(引數列表)
⑤ 物件的初始狀態(建構函式)
使用類建立物件的時候自動呼叫
不顯示寫出,缺省會自動新增乙個空的建構函式
def __init__(self,attr...):
self.attr=attr
self....=...
pass
(2)self
self代表類的例項,而非類
物件呼叫方法,方法中的self代表物件。
self._ class _ 代表類名
(3)析構函式與重寫函式
析構函式_ del _() 釋放物件時自動呼叫
在函式裡定義的物件,會在***函式結束***時自動釋放,這樣可以用來減少記憶體空間的釋放
重寫函式_ repr _ 與 _ str _
重寫:將函式重新寫一遍
print(物件名)
_ str _():在呼叫print列印物件時自動呼叫,給使用者用的 return " "
_ repr _():給機器用的,python直譯器裡 敲物件後呼叫的方法
注意:在沒有str時,有repr str=repr
(4)訪問限制
如果要讓內部屬性不被外部直接訪問,在python中如果在屬性前加兩個下劃線,那麼這個屬性就變成了私有屬性
self.__money = money
不能直接訪問類名.__money是因為python直譯器把__money變成了_類名__money
#通過內部方法,修改私有屬性
def setmoney(self,money):
if money<0:
money =0
self.__money = money
#獲取私有屬性
def getmoney(self):
return self.__money
__ xx__屬於特殊變數,可以直接訪問
_x變數 雖然可以訪問,但是請視為私有
(5)類例項
人開槍設計子彈
人 類名:person
屬性:gun
行為:fire
槍 類名:gun
屬性:bulletbox
行為:shoot
彈夾 類名:bulletbox
屬性:bulletcount
行為:
class bulletbox(object): # 彈夾類
def __init__(self, count):
self.bulletcount = count
class gun(object):
def __init__(self, bulletbox):
self.bulletbox = bulletbox
def shoot(self):
if self.bulletbox.bulletcount == 0:
print("沒有子彈了")
else:
self.bulletbox.bulletcount -= 1
print("剩餘子彈", self.bulletbox.bulletcount, "發")
class person(object): # 人類
def __init__(self, gun):
self.gun = gun
def fire(self):
self.gun.shoot()
def fillbullet(self):
self.gun.bulletbox.bulletcount += 1
bulletbox = bulletbox(5)
gun = gun(bulletbox)
per = person(gun)
per.fire()
per.fire()
per.fillbullet()
per.fire()
(6)繼承:
簡化**,減少冗餘
提高**健壯性
提高**安全性
多型的前提
單繼承例項:
class person(object):
def __init__(self,name,age,money):
self.name=name
self.age=age
self.__money=money
def setmoney(self,money):
self.__money=money
def getmoney():
return self.__money
class student(person):
def __init__(self,name,age):
#呼叫父類中的__init__
super(student,self).__init__(name,age)
stu = student("tom",18,12345)
print(stu.name,stu.age)
print(stu.getmoney()) #通過繼承過來的公用方法訪問私有屬性
多繼承例項:
class father(object): #父親類
def __init__(self,money):
self.money=money
def play(self):
print("play")
def func(self):
print("func")
class mother(object): #母親類
def __init__(self,facevalue):
self.facevalue=facevalue
def eat(self):
print("eat")
def func(self):
print("func")
class child(father,mother): #孩子類
def __init__(self,money,facevalue):
#寫法father.__init__(self,money)
mother.__init__(self,facevalue)
#父類中方法名相同,預設呼叫在括號中排前面的父類中的方法
python入門 P37類和物件 物件導向程式設計
class相當於房子圖紙,每個物件是參照圖紙建立的實際的房子,self相當於每一棟房子的門牌號,在下面這段 裡,每個物件都是呼叫了自己那棟房子裡的方法,就是因為self tips 在方法裡,self必須是第乙個 class build def setname self,name self.name ...
15 Python 物件導向
物件導向 oop 是一種對現實世界理解和抽象的方法,物件的含義是指在現實生活中能夠看得見摸得著的具體事物,一句比較經典的描述是一切皆物件,python 是一門物件導向的語言,物件導向程式設計簡單來說就是一種封裝 的方式。物件導向相關概念 1.類 python 中類的定義使用 class 關鍵字 cl...
15 Python物件導向
2 物件導向程式設計的主要概念 3 物件導向設計原則 本文主要介紹物件導向程式設計的主要概念以及物件導向設計原則。在進行開發的時候經常會提到物件導向,在物件導向的世界引入了物件的概念,物件既有屬性又有對應的過程,這裡的屬性通常就是指我們的資料成員,過程就是指我們的成員函式,函式的作用就是處理屬性。在...