面向對象是一種編程思想,是對現實世界中的事物進行抽象的方式。應用到代碼編程設計中,是一種創建實物模型的方式。python
面向過程關注的是完成工做的步驟,面向對象關注的是誰能完成工做。面向對象是在完成工做的時候關注哪些個體可以完成對應的工做,找到對應的個體便可完成對應任務。編程
類是一系列事物的統稱,同類事物一定具備的特徵。平常事物的特徵根據特性分爲狀態和行爲,對應到類中就是變量和方法。bash
特徵分類: 狀態函數
變量 -->(成員變量)
行爲 --> 方法(成員方法)
統稱:類的成員
複製代碼
class 類名:
pass
複製代碼
class Cat:
pass
複製代碼
類名命名規範:知足大駝峯命名規範。spa
對象是類的具體表現形式,是實際存在的個體。(類是一系列事物的統稱)設計
對象名 = 類名()
複製代碼
class Cat: # 建立了一個類
pass
cat1 = Cat() # 建立了一個對象
複製代碼
成員變量用於描述對象的固有狀態或屬性。code
class 類名:
def __init__(self):
self.變量名1 = 值1
self.變量名2 = None
複製代碼
class Dog:
def __init__(self):
"""定義在 __init__ 裏面的是共有變量"""
self.type = "牧羊犬"
self.name = None
複製代碼
對象名.變量名 = 值
複製代碼
class Dog:
def __init__(self):
self.type = "牧羊犬"
self.name = None
dog1 = Dog()
dog1.name = "tom"
dog1.colth = "red" # 對象建立了一個本身的獨有變量
複製代碼
取值:對象名.變量名
賦值:對象名.變量名 = 值對象
成員方法用於描述對象的固有行爲。遊戲
格式一(無參方法):ci
class 類名:
def 方法名(self):
方法體
複製代碼
class Dog:
def __init__(self):
self.type = "牧羊犬"
self.name = None
def eat(self): # 成員方法
print("狗吃骨頭")
複製代碼
格式二(有參方法):
class 類名:
def 方法名(self,形參1,形參2,…):
方法體
複製代碼
class Dog:
def __init__(self):
self.type = "牧羊犬"
self.name = None
def eat(self):
print("狗吃骨頭")
def run(self,meter): # 成員方法帶參 meter
print("狗會跑步,跑了%d米"% meter)
複製代碼
格式一(調用無參方法):
對象名.方法名()
格式二(調用有參方法):
對象名.方法名(實參1,實參2,…)
class Dog:
def __init__(self):
self.type = "牧羊犬"
self.name = None
def eat(self):
print("狗吃骨頭")
def run(self,meter): # 成員方法帶參 meter
print("狗會跑步,跑了%d米"% meter)
dog1 = Dog()
dog1.eat() # 無參調用方法
dog1.run(340) # 有參調用方法
複製代碼
格式一:
def __init__(self):
self.變量名1 = 值1
複製代碼
class Dog:
def __init__(self):
self.type = "牧羊犬"
self.name = None
複製代碼
格式二:
def __init__(self,形參1,形參2,…):
self.__屬性名1 = 形參1
self.__屬性名2 = 形參2
複製代碼
class Dog:
def __init__(self,name):
self.type = "牧羊犬"
self.name = name
複製代碼
__init__方法在建立對象時被運行,無需手工調用便可執行。
__init__方法中若是有形參,在建立對象時須要傳遞對應的實參。
魔術方法是在類中聲明、定義的方法,執行時無需手工調用,自動執行。
__str__方法是在使用print函數打印輸出對象到屏幕時被調用的方法,用於返回對象的規範化字符串表現形式.
def __str__(self):
return 打印對象是顯示的信息
複製代碼
class Dog:
def __init__(self):
self.type = "牧羊犬"
self.name = None
def eat(self):
print("狗吃骨頭")
def run(self,meter):
print("狗會跑步,跑了%d米"% meter)
def __str__(self):
print("打印了一隻dog")
dog1 = Dog()
print(dog1) # 打印對象時調用 __str__ 函數
複製代碼
self.變量名
複製代碼
class Dog:
def __init__(self):
self.type = "牧羊犬"
self.name = None
def introduce(self):
print("我是一隻%s,我叫%s"% (self.type,self.name)) # 此處調用成員變量
dog1 = Dog()
dog1.name = "大黃"
dog1.introduce()
複製代碼
self.方法名(實參1,實參2,…)
複製代碼
class Dog:
def catch(self):
self.jump()
self.grasp()
self.bite()
def jump(self):
print("狗跳起來了")
def grasp(self):
print("狗抓住了兔子")
def bite(self):
print("狗咬死了兔子")
dog1 = Dog()
dog1.catch()
複製代碼
self 僅出如今成員方法中,指代執行該方法的對象
封裝操做能夠對受訪問保護的成員進行功能開放的控制,達到保護數據不被非法訪問的目的。
self.__屬性名 = 值
複製代碼
class Card:
def __init__(self):
self.card_id = None
self.__pwd = None
複製代碼
def __方法名(self,形參1,形參2,...):
方法體
複製代碼
變量私有化格式:
self.__屬性名 = 值
複製代碼
提供公共的訪問器格式:
def get_屬性名(self):
return self.__屬性名
複製代碼
提供公共的修改器格式:
def set_屬性名(self,屬性名):
self.__屬性名 = 屬性名
複製代碼
class Card:
def __init__(self):
self.card = None
self.__pwd = None
def __get_pwd(self):
"""能夠用 __get 這個函數去訪問私有變量"""
return self.__pwd
def __set_pwd(self,pwd):
"""能夠用 __set 這個函數去修改私有變量"""
self.__pwd = pwd
複製代碼
類變量是定義在類中,不屬於某個具體對象的特徵,被全部對象共同使用的特徵
class 類名:
變量名 = 值
複製代碼
賦值格式:
類名.類變量名 = 值
複製代碼
取值格式:
類名.類變量名(推薦)
對象名.類變量名(不推薦)
複製代碼
類方法是定義在類中,不屬於某個具體對象的行爲,被全部對象共同使用的行爲
class 類名:
@classmethod
def 方法名(cls,形參1,形參2,…):
方法體
複製代碼
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod
# 定義一個類方法
def eat(cls,foods):
print("這個%s真好吃"% foods)
複製代碼
類名.類方法名(實參1,實參2,…) (推薦)
對象名.類方法名(實參1,實參2,…) (不推薦)
複製代碼
class 類名:
@staticmethod
def 方法名(形參1,形參2,…):
方法體
複製代碼
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
@statimethod
def show():
print("今天是一個好日子")
複製代碼
類名.靜態方法名(實參1,實參2,…) (推薦)
對象名.靜態方法名(實參1,實參2,…) (不推薦)
複製代碼
""" 演示手機案例 要求: 手機電量默認是100 打遊戲每次消耗電量10 聽歌每次消耗電量5 打電話每次消耗電量4 接電話每次消耗電量3 充電能夠爲手機補充電量 """
# 程序分析:
# 一、須要定義一個類
# 二、須要定義一個變量用來記錄,手機電池電量的變化.
# 三、須要定義5個行爲來描述充電和耗電的操做
#
# 首先定義一個類,類名爲 phone。
class Phone:
def __init__(self):
self.power = 100
self.type = None
# project = a num = b
def use_power(self, project, num):
if self.power >= num:
self.power -= num
print("%s手機當前正在%s,手機電量減小%d%%,當前手機剩餘電量爲%d%%" % (self.type, project, num, self.power))
else:
print("%s手機當前電量太低,僅剩餘%d%%沒法完成%s,請充電後再進行操做" % (self.type, self.power, project))
def game(self):
self.use_power("打遊戲",10)
def music(self):
self.use_power("聽音樂", 5)
def call(self):
self.use_power("打電話", 4)
def answer(self):
self.use_power("接電話", 3)
def electricize(self,num):
"""定義一個充電行爲,num 用於接受一次充電的電量"""
self.power += num
if self.power >= 100:
print("%s手機當前電量已經充滿,"% self.type)
self.power = 100
else:
print("已經對%s手機充電%d%%,當前手機電量爲:%d%%"% (self.type,num,self.power))
def __str__(self):
return "%s手機,當前的手機電量爲:%d%%" % (self.type,self.power)
# 建立一部手機,huawei,對他進行操做
huawei = Phone()
huawei.type = "華爲"
huawei.game()
huawei.call()
huawei.call()
huawei.call()
huawei.call()
huawei.call()
huawei.call()
huawei.electricize(20)
print(huawei)
lianxiang = Phone()
lianxiang.type = "聯想"
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
lianxiang.game()
print(lianxiang)
lianxiang.electricize(80)
lianxiang.electricize(80)
print(lianxiang)
複製代碼
運行結果:
華爲手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲90%
華爲手機當前正在打電話,手機電量減小4%,當前手機剩餘電量爲86%
華爲手機當前正在打電話,手機電量減小4%,當前手機剩餘電量爲82%
華爲手機當前正在打電話,手機電量減小4%,當前手機剩餘電量爲78%
華爲手機當前正在打電話,手機電量減小4%,當前手機剩餘電量爲74%
華爲手機當前正在打電話,手機電量減小4%,當前手機剩餘電量爲70%
華爲手機當前正在打電話,手機電量減小4%,當前手機剩餘電量爲66%
已經對華爲手機充電20%,當前手機電量爲:86%
華爲手機,當前的手機電量爲:86%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲90%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲80%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲70%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲60%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲50%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲40%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲30%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲20%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲10%
聯想手機當前正在打遊戲,手機電量減小10%,當前手機剩餘電量爲0%
聯想手機當前電量太低,僅剩餘0%沒法完成打遊戲,請充電後再進行操做
聯想手機當前電量太低,僅剩餘0%沒法完成打遊戲,請充電後再進行操做
聯想手機,當前的手機電量爲:0%
已經對聯想手機充電80%,當前手機電量爲:80%
聯想手機當前電量已經充滿,
聯想手機,當前的手機電量爲:100%
複製代碼