溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python面向?qū)ο蠡A(chǔ)舉例分析

發(fā)布時間:2021-11-30 17:26:54 來源:億速云 閱讀:119 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Python面向?qū)ο蠡A(chǔ)舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python面向?qū)ο蠡A(chǔ)舉例分析”吧!

    1. 面向?qū)ο髈op了解

    # ### oop 面向?qū)ο蟮某绦蜷_發(fā)
    # (1) 類的定義
    # 1
    class Car:
    	pass
    # 2 推薦
    class Car():
    	pass
    # 3.
    class Car(object):
    	pass
    	
    # (2)類的實例化
    class Car():
    	pass
    obj = Car()
    print(obj)
    # (3)類的基本結(jié)構(gòu)
    """
    類中兩樣?xùn)|西:
    	(1)成員屬性
    	(2)成員方法
    """
    class Car():
    	# 成員屬性
    	color = "白色"
    	# 成員方法
    	def didi():
    		print("小車會嚓嚓的叫")
    
    # 語法上不報錯,但是嚴(yán)禁使用,破壞了類中的結(jié)構(gòu),不要裸露的把判斷和循環(huán)直接寫在類中,而是用方法包起來
    class Car():
    	if 5 ==5 :
    		print(11223344)
    # (4)類的命名
    """類的命名 : 推薦使用大駝峰命名法,每個單詞的首字母都要大寫"""
    """
    mycar => MyCar
    zhangbaozhang => ZhangBaoZhang
    """

    2. 對象的相關(guān)操作

    # ### 面向?qū)ο蟮姆庋b - 對象的操作
    """
    封裝:
    	1.私有 : 在類內(nèi)可以互相訪問,在類外不能訪問
    	2.公有 : 在類內(nèi)或者類外都可以訪問
    類中成員:
    	1.成員屬性
    	2.成員方法
    綁定方法:
    	1.綁定到對象 : 當(dāng)對象去調(diào)用類中成員方法時,系統(tǒng)會默認(rèn)把該對象當(dāng)成參數(shù)傳遞給該方法
    	2.綁定到類   : 當(dāng)對象或者類去調(diào)用類中成員方法時,系統(tǒng)會默認(rèn)把該類當(dāng)成參數(shù)傳遞給該方法
    使用方式:
    	對象.成員屬性
    	對象.成員方法
    """
    class MyCar():
    	# 公有屬性
    	logo = "布加迪威龍"
    	# 私有屬性
    	__price = "2000萬"
    	# 公有方法
    	def run(self):
    		print("百公里油耗300L,logo={} , price={}".format(self.logo, self.__price))
    	# 私有方法
    	def __info(self):
    		print("車主信息保密,據(jù)說是某個房地產(chǎn)大佬的兒子")
    # 實例化對象(類的實例化)
    obj = MyCar()
    # (1)實例化的對象訪問成員屬性和方法
    # 公有
    print(obj.logo)
    obj.run()
    # 私有 (私有成員無法在類外訪問,類內(nèi)可以)
    # obj.__price error
    # obj.run()
    # obj.__info() error
    
    #(2)實例化的對象動態(tài)添加公有成員屬性
    obj.color = "尿黃色"
    obj.logo = "五菱宏光" 
    print(obj.color)
    print(obj.logo)
    # __dict__ 獲取類對象的內(nèi)部成員
    print(obj.__dict__)
    print(MyCar.__dict__)
    #(3)實例化的對象動態(tài)添加公有成員方法
    # 1.無參方法
    def dahuangfeng():
    	print("請加我大黃蜂")
    obj.dahuangfeng = dahuangfeng
    obj.dahuangfeng()
    # 2.有參方法
    # 基本版
    def qingtianzhu(name):
    	print("請叫我一柱擎天么,{}".format(name))
    obj.qingtianzhu = qingtianzhu
    obj.qingtianzhu("擎天柱")
    # 升級版
    def qingtianzhu(obj,name):
    	print("請叫我一柱擎天么,{},我的顏色是{}".format(name,obj.color))
    obj.qingtianzhu = qingtianzhu
    obj.qingtianzhu(obj,"擎天柱")
    # 究極版
    """如果要創(chuàng)建綁定方法,參數(shù)的順序,self對象本身要放到第一位."""
    def qingtianzhu(obj,name):
    	print("請叫我一柱擎天么,{},我的顏色是{}".format(name,obj.color))
    import types
    # 創(chuàng)建綁定方法,系統(tǒng)自動把該對象當(dāng)成參數(shù)傳遞給方法;
    # types.MethodType(方法,對象) => 綁定方法   
    res = types.MethodType(qingtianzhu,obj)
    print(res)
    obj.qingtianzhu = types.MethodType(qingtianzhu,obj)
    obj.qingtianzhu("擎天柱")
    # 3.lambda表達(dá)式
    obj.weizhentian = lambda : print("我是威震天")
    obj.weizhentian()

    小提示:

    類對象在調(diào)用方法,如果方法是類外的(自定義的方法),那么不會自動傳參的(不會把類對象傳到方法里面)
    self是用來接收對象這參數(shù)(self只是一個名字而已,無所謂,習(xí)慣用self)

    3. 類的相關(guān)操作

    # ### 面向?qū)ο蟮姆庋b - 類的操作
    """
    使用方式:
    	類.成員屬性
    	類.成員方法
    """
    class MyCar():
    	# 公有成員屬性
    	platenum = "京A7758BB"
    	# 私有成員屬性
    	__earning = "月收入6000"
    	# 公有成員方法
    	def car_info():
    		print("牌照信息可以公開")
    		print("<======>")
    		MyCar.__money_info()
    	# 私有成員方法
    	def __money_info():
    		print( "收入信息保密" , MyCar.__earning )
    
    # (1)定義的類訪問公有成員屬性和方法
    print(MyCar.platenum)
    MyCar.car_info()
    # MyCar.__money_info() error
    # (2)定義的類動態(tài)添加公有成員屬性
    MyCar.oil = "1000L"
    print(MyCar.oil)
    print(MyCar.__dict__)
    # (3)定義的類動態(tài)添加公有成員方法
    # 1.無參方法
    def car_light():
    	print("我是造車燈的方法")
    MyCar.car_light = car_light
    MyCar.car_light()
    # 2.有參方法
    def car_engine(name):
    	print("我是造{}發(fā)動機(jī)的方法".format(name))
    MyCar.car_engine = car_engine
    MyCar.car_engine("三缸發(fā)動機(jī)")
    # 3.lambda表達(dá)式
    MyCar.luntai = lambda : print("我是造輪胎的方法")
    MyCar.luntai()
    
    # 對比 對象和類之間的不同
    """
    1.類中的無參方法默認(rèn)只能類來調(diào)用,對象無法調(diào)取
    2.對象可以調(diào)用類中的成員,反過來,類不能調(diào)用對象中的成員
    3.每創(chuàng)建一個對象都會在內(nèi)存中占用一份空間,對象之間是彼此獨立的;
    """
    obj = MyCar()
    # obj.car_info() error
    MyCar.car_info()
    
    obj.price = "10萬"
    print(MyCar.price)

    4. 類對象的刪除操作

    # ### 1.如何在類外訪問私有成員
    class Plane():
    	# 公有成員
    	captian = "趙沈陽"
    	# 私有成員
    	__air_sister = "3名空姐"
    	# 公有綁定方法
    	def fly(self):
    		print("飛機(jī)要非要平流層,才能減少震動",self.__air_sister)
    	# 私有綁定方法
    	def __age(self):
    		print("空姐年齡保密")
    	# 公有無參方法
    	def fly2():
    		print("航天飛機(jī)飛到天空層,翱翔太空")
    	# 私有無參方法
    	def __earn():
    		print("機(jī)長的收入保密")
    	def pub_get1(self):
    		print(self.__air_sister)
    		self.__age()
    	def pub_get2():
    		print(Plane.__air_sister)
    		Plane.__earn()
    # 實例化對象
    obj = Plane()
    # 方法一.訪問私有成員 (不推薦)
    # python私有化: 采取了改名策略 =>  _類名 + __air_sister
    # print(obj.__air_sister)
    print(obj._Plane__air_sister)
    print(Plane.__dict__)
    """
    {'__module__': '__main__', 'captian': '趙沈陽', 
    '_Plane__air_sister': '3名空姐', 
    'fly': <function Plane.fly at 0x7f2774616158>, '_Plane__age': <function Plane.__age at 0x7f27746161e0>, 'fly2': <function Plane.fly2 at 0x7f2774616268>, '_Plane__earn': <function Plane.__earn at 0x7f27746162f0>, '__dict__': <attribute '__dict__' of 'Plane' objects>, '__weakref__': <attribute '__weakref__' of 'Plane' objects>, '__doc__': None}
    """
    # 方法二.訪問私有成員 (使用類中的公有方法,間接訪問私有成員) (推薦)
    obj = Plane()
    obj.pub_get1()
    Plane.pub_get2()
    # ### 2.使用類對象刪除相應(yīng)的成員
    """
    1.對象可以訪問類中的公有成員,但是無權(quán)修改或者刪除該類中的成員
    2.對象在訪問成員時,優(yōu)先訪問該對象自己的成員,如果沒有在訪問類的,類如果也沒有直接報錯;
    """
    # 刪除對象成員屬性
    obj.captian = "趙世超"
    del obj.captian
    print(obj.captian)
    # 刪除對象成員方法
    obj.basketball = lambda : print("我的私人飛機(jī)可以在天上打籃球")
    print(obj.__dict__)
    obj.basketball()
    del obj.basketball
    print(obj.__dict__)
    # obj.basketball() error
    # 刪除類中成員屬性
    del Plane.captian
    print(Plane.__dict__)
    # Plane.captian
    # print(obj.captian) error
    # 刪除類中成員方法
    del Plane.fly2
    # Plane.fly2() error
    # 注意: 對象無法調(diào)無參方法!! 返回來,類可以調(diào)用對象的綁定方法么? 可以!!
    Plane.fly(obj)

    小提示:

    如果在類外添加公有方法
    def  __abc():
        print(1)
     在類外定義的方法__abc()只是簡單的函數(shù)名字而已,之后在類里面定義
    的時候,__abc()才是私有方法。
    刪除或創(chuàng)建私有的方法,要在類外去操作 
    對象在調(diào)用屬性的時候,先看自己有沒有,然后在看類中的屬性
    class Plane():
        def fly1(self):
            print("飛機(jī)要起飛")
       def fly2(self):
           print("飛機(jī)真的要起飛了",self.captian)
       def fly3():
            print("飛機(jī)不起飛")
    Plane.fly1(1) 類可以調(diào)用有參的方法,隨便穿個值進(jìn)去即可
    Plane.fly2(1) 這樣的話就報錯,Plane.fly2(obj) 把對象傳進(jìn)去就可以出結(jié)果
    如果說對象調(diào)用類中無參的方法是不會成功的

    5. 小練習(xí)

    1.請定義一個交通工具(Vehicle)的類,其中有:
    屬性:速度(公有speed), 車的類型(私有type)
    方法:速度(公有setSpeed),加速(私有speedUp),減速(私有speedDown)
    讓公有setSpeed調(diào)用私有speedUp和私有speedDown
    2.用類改寫:猜數(shù)字游戲:
    一個類有兩個成員num和guess,
    num有一個初值100。
    定義一個方法guess,
    調(diào)用guess,如果大了則提示大了,小了則提示小了。等于則提示猜測成功。
    3.創(chuàng)建一個圓Circle類。
    為該類提供一個變量r表示半徑
    方法一返回圓的面積,方法二返回圓的周長;

    小提示:

    如果在類內(nèi)的話,都是用對象調(diào)用方法或變量(self.speed、self.eat()),如果不是類的話,可以直接調(diào)變量和方法
    r = 3 歸屬于circle這個類
    self.r = r 歸屬于self這個對象

    答案:

    """
    1.請定義一個交通工具(Vehicle)的類,其中有:
    屬性:速度(公有speed), 車的類型(私有type)
    方法:速度(公有setSpeed),加速(私有speedUp),減速(私有speedDown)
    讓公有setSpeed調(diào)用私有speedUp和私有speedDown
    """
    class Vehicle():
    	speed = "百公里1小時"
    	__type = "拖拉機(jī)小蹦蹦"
    	def setSpeed(self):
    		self.__speedUp()
    		self.__speedDown()
    	def __speedUp(self):
    		print("我是加速方法,速度{}".format(self.speed))
    	def __speedDown(self):
    		print("我是減速方法,小車的類型是{}".format(Vehicle.__type))
    obj = Vehicle()
    obj.setSpeed()
    """
    2.用類改寫:猜數(shù)字游戲:
    一個類有兩個成員num和guess,
    num有一個初值100。
    定義一個方法guess,
    調(diào)用guess,如果大了則提示大了,小了則提示小了。等于則提示猜測成功。
    """
    import re
    class GuessGame():
    	num = 100
    	def guess(self):
    		while True:
    			n = input("請輸入要猜測的數(shù)字")
    			obj = re.search(r"^\d+$",n)
    			# print(obj)
    			if obj:
    				n = int(obj.group())
    				if n > self.num:
    					print("大了..")
    				elif n < self.num:
    					print("小了..")
    				elif n == self.num:
    					print("ok~ bingo")
    					break
    			else:
    				print("輸入的內(nèi)容不正確")
    # obj = GuessGame()
    # obj.guess()
    """
    3.創(chuàng)建一個圓Circle類。
    為該類提供一個變量r表示半徑
    方法一返回圓的面積,方法二返回圓的周長;
    """
    import math
    class Circle():
    	r = 3
    	def area(self):
    		return math.pi * self.r ** 2
    	def perimeter(self):
    		return 2 * math.pi * self.r
    obj = Circle()
    res1 = obj.area()
    res2 = obj.perimeter()
    print(res1,res2)
    # 方法二 (推薦)
    import math
    class Circle():
    	def __init__(self,r):
    		self.r = r	
    	def area(self):
    		return math.pi * self.r ** 2
    	def perimeter(self):
    		return 2 * math.pi * self.r
    obj = Circle(4)
    res1 = obj.area()
    res2 = obj.perimeter()
    print(res1,res2)

    到此,相信大家對“Python面向?qū)ο蠡A(chǔ)舉例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問一下細(xì)節(jié)
    AI