python 基礎語法之面向對象

python 基礎語法-面向對象

1、面向對象

一、面向對象概念

面向對象是一種編程思想,是對現實世界中的事物進行抽象的方式。應用到代碼編程設計中,是一種創建實物模型的方式。python

二、面向和麪向過程的區別

面向過程關注的是完成工做的步驟,面向對象關注的是誰能完成工做。面向對象是在完成工做的時候關注哪些個體可以完成對應的工做,找到對應的個體便可完成對應任務。編程

2、類

一、類的概念

類是一系列事物的統稱,同類事物一定具備的特徵。平常事物的特徵根據特性分爲狀態和行爲,對應到類中就是變量和方法。bash

特徵分類: 狀態函數

變量 -->(成員變量)
行爲 --> 方法(成員方法)
			 統稱:類的成員
複製代碼

二、類定義語法格式

class 類名:
    pass
複製代碼
class Cat:
    pass
複製代碼

三、類名的命名規範

類名命名規範:知足大駝峯命名規範。spa

3、對象

一、對象的概念

對象是類的具體表現形式,是實際存在的個體。(類是一系列事物的統稱)設計

二、建立對象的語法格式

對象名 = 類名()
複製代碼
class Cat: # 建立了一個類
    pass
    
cat1 = Cat() # 建立了一個對象
複製代碼

4、成員變量

一、成員變量的概念

成員變量用於描述對象的固有狀態或屬性。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" # 對象建立了一個本身的獨有變量
複製代碼

四、共有變量與獨有變量的區別

  • 公有變量在__init__方法中聲明,每一個對象都具備該變量
  • 獨有變量在建立對象後聲明,只有當前對象具備此變量
  • 定義對象的獨有變量時,若是獨有變量名與公有變量名相同,視爲修改公有變量的值;若是獨有變量名與公有變量名不相同,視爲定義新的獨有屬性
  • None含義是爲空,表示沒有具體的數據

五、變量的調用格式

取值:對象名.變量名
賦值:對象名.變量名 = 值對象

5、成員方法

一、成員方法概念

成員方法用於描述對象的固有行爲。遊戲

二、定義成員方法語法格式

格式一(無參方法):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) # 有參調用方法
複製代碼

6、__init __ 方法

一、__ init__ 方法的做用

  • __init__方法,也稱爲構造方法,建立對象時爲對象初始化成員變量

二、定義__init__ 方法格式

格式一:

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__方法在建立對象時被運行,無需手工調用便可執行。
__init__方法中若是有形參,在建立對象時須要傳遞對應的實參。

四、魔術方法

魔術方法是在類中聲明、定義的方法,執行時無需手工調用,自動執行。

7、__ str__ 方法

一、__ str__ 方法的做用

__str__方法是在使用print函數打印輸出對象到屏幕時被調用的方法,用於返回對象的規範化字符串表現形式.

二、定義__str__ 方法的語法格式
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__ 函數
複製代碼

8、成員方法調用類成員

一、成員方法中調用成員變量語法格式

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 僅出如今成員方法中,指代執行該方法的對象

9、封裝

一、封裝的做用

封裝操做能夠對受訪問保護的成員進行功能開放的控制,達到保護數據不被非法訪問的目的。

二、定義私有變量的語法格式

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
複製代碼

10、類變量

一、類變量的概念

類變量是定義在類中,不屬於某個具體對象的特徵,被全部對象共同使用的特徵

二、定義類變量的語法格式

class 類名:
    變量名 = 值
複製代碼

三、調用類變量的語法格式

賦值格式:

類名.類變量名 = 值
複製代碼

取值格式:

類名.類變量名(推薦)
對象名.類變量名(不推薦)
複製代碼

四、注意事項

  • 類變量推薦使用類名取值訪問,也可使用對象名取值訪問
  • 類變量只能經過類名修改;使用對象名調用類變量修改類變量的值時會建立新的對象獨有變量;若是此時對象具備同名對象變量,則修改對應的變量值
  • 類變量能夠私有化

11、類方法

一、類方法的概念

類方法是定義在類中,不屬於某個具體對象的行爲,被全部對象共同使用的行爲

二、定義類方法的基本語法

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,…) (不推薦)
複製代碼

四、注意事項

  • 類方法中不容許使用實例變量和實例方法
  • 類方法中容許使用類變量和類方法,經過第一個參數cls進行
  • 實例方法中容許使用類變量和類方法

12、靜態方法

一、定義靜態方法語法格式

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%
複製代碼
相關文章
相關標籤/搜索