亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python類(面向對象)介紹

系統 1802 0

什么是面向對象?
面向對象技術簡介

  1. 類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
  2. 方法:類中定義的函數。
  3. 類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。
  4. 數據成員:類變量或者實例變量用于處理類及其實例對象的相關的數據。
  5. 方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
  6. 局部變量:定義在方法中的變量,只作用于當前實例的類。
  7. 實例變量:在類的聲明中,屬性是用變量來表示的。這種變量就稱為實例變量,是在類聲明的內部但是在類的其他成員方法之外聲明的。
  8. 繼承:即一個派生類(derived class)繼承基類(base
    class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關系(例圖,Dog是一個Animal)。
  9. 實例化:創建一個類的實例,類的具體對象。
  10. 對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。

面向對象一定要有類,以下介紹均基于類

類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
屬性,就是數據,包括類變量和實例變量
方法,就是操作數據的行為,包括實例方法、類方法和靜態方法

為什么要使用類呢?
每個類都是一個模板,統一存儲數據和操作數據的規則
每個類都是一個類別,基于這個類別管理數據,方便查找和操作
基于類可以實現繼承和多態,方便程序的擴展
類作為一個整體,把一組組相關數據放到類的實例里面,進行存儲,計算等,實現安全性、獨立性,規則的操作統一,保證數據的一致性和完整性。

什么是封裝?
將對象的數據與操作數據的方法相結合,通過方法將對象的數據與實現細節保護起來,就稱為封裝。外界只能通過對象的方法訪問對象,因此封裝同時也實現了對象的數據隱藏。通過封裝和數據隱藏機制,將一個對象相關的變量和方法封裝為一個獨立的軟件體,單獨進行實現和維護,并使對象能夠在系統內方便地進行傳遞,另外也保證了對象數據的一致性并使程序易于維護,封裝可以讓調用者不用關心對象是如何構建的而直接進行使用。

函數和類中的方法都可以實現封裝,那么他們有什么區別呢?
類:
專有數據(可以存儲,和對外使用)
方法(用于操作專有數據的),實現操作數據的規則。類實例不但有操作某些數據的過程和算法,且保存相關的數據

函數:
無專有數據,誰給他傳值都可以處理,并返回,函數只有操作某些數據的過程和算法,但本身不能存儲數據。

所以類和函數的區別在于是否保存數據

一個簡單的類的例子:

            
              class P:

    def __init__(self,value): #構造方法,初始化用的
        self.value = value   #value局部變量
                             #self.value叫做實例變量

p =P(10)
print(p.value)    #打印10

            
          

兩個下劃線開頭的方法或者是變量,都是私有的。
私有的變量和方法,只能類內部的方法去調用,外部不可以
拿上面的例子說,如果是self.__value = value,print(p.__value),這樣就會報錯,因為外部不能使用類里的私有變量

類:
一組數據(可以是0個、1個或多個),以及提供操作這組數據的相關方法,數據和方法組成了類。
類定義的所有內容,在內存中僅有一份(類變量和類方法)
類實例(多個),每個類實例在內存中都有自己的空間。
類名全大寫

            
              class PERSON(object):
	def __init__(self,name,sex,height,weight,bachelor):
		self.name = name
		self.sex = sex
		self.height = height
		self.weight = weight
		self.bachelor = True
	
    def print_name(self):
	    print(self.name)

alex = PERSON("Alex","M",180,200,True)
mike = PERSON("Mike","M",101,250,False)

print(alex.weight)
print(mike.weight)

alex.weight += 1
print(alex.weight)

alex.print_name()

            
          

類的方法里面為啥要有個self呢?
alex.print_name()---->在內存中找到類定義所在的內存位置,找到類里面定義的方法print_name(),self—>alex所在的內存地址,使用alex實例中的name值進行打印。

類:存儲、管理、操作一組特定的數據的。通過私有變量和相應的操作方法,來保證數據的一致性和完整性。

保證數據的安全性有2種方法:
方法1:
設定私有變量__xxx,通過get_xxx()取數據,通過set_xxx賦值
取數據和設置數據的規則都在方法里。
__xxx是安全的,只能通過實例方法去訪問。

方法2:
使用公有變量,通過@property 來讀取數據,
通過@xxxx.setter來設置數據。
數據也是安全的,因為有2個方法來設定取數據和修改數據規則。

            
              class Goods(object):

    def __init__(self,pri):
        self.pri = pri

    @property
    def price(self):
        return int(self.pri)

    @price.setter
    def price(self, value):
        if self.pri>=100 or self.pri<0:
            return None

    @price.deleter
    def price(self):
        print("價格變量被刪除了!")
        del self.pri

#調用
obj = Goods(50.50)

print(obj.price)          # 自動執行 @property 修飾的 price 方法,并獲取方法的返回值,打印50
obj.price = 123    # 自動執行 @price.setter 修飾的 price 方法,并將  123 賦值給方法的參數
print(obj.price)  #打印50
del obj.price      # 自動執行 @price.deleter 修飾的 price 方法,打印 價格變量被刪除了!

            
          

類的特殊成員
1.__doc__表示類的描述信息
2.__module__表示當前操作的對象在哪個模塊
3.__class__表示當前操作的對象的類是什么
4.__del__析構方法,當對象在內存中被釋放時,自動觸發執行
注:此方法一般無須定義,因為Python是一門高級語言,程序員在使用時無需關系內存的分配和釋放,因為此工作都是交給Python解釋器來執行,所以,析構函數的調用是由解釋器在進行垃圾回收時自動觸發執行的。
5.__call__對象后面加括號,觸發執行
注:構造方法的執行是由創建對象觸發的,即:對象=類名();而對于__call__方法的執行是由對象后加括號觸發的,即:對象()或類()()
6.__dict__類或對象中的所有成員
類的普通字段屬于對象;類中的靜態字段和方法等屬于類
7.__str__如果一個類中定義了__str__方法,那么在打印對象時,默認輸出該方法的返回值。
8. getitem 、 setitem 、__delitem__用于索引操作,如字典。以上分別表示獲取、設置、刪除數據
9. getslice setslice 、 delslice__在python2.7可以使用,在3.x已經被去掉了,需要使用__getitem setitem 、__delitem__和__getslice__來實現
10. iter__用于迭代器,之所以列表、字段、元組可以進行for循環,是因為類型內部定義了__iter
11.__slot__限制實例可以使用的屬性名稱
12.__metaclass__用途較少
13.__new__在類準備將自身實例化時調用, new ()方式始終都是類的靜態方法,即使沒有被加上靜態方法裝飾器

類實現了如下方法,就是可以迭代的對象
iter ()
next ()


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品一二区 | 日本一级特黄aa毛片免费观看 | 亚洲婷婷在线视频 | 国产成人亚洲综合 | 狠狠色丁香婷综合久久 | 色综合久久最新中文字幕 | 免费看真人a一级毛片 | 九九99精品 | 一级片在线免费观看 | 美女精品久久久久久国产潘金莲 | 天天搞天天操 | 国产色产综合色产在线观看视频 | 成人精品| 美女在线看永久免费网址 | 久久久久在线观看 | 国产精品亚洲专一区二区三区 | 久久免费精品高清麻豆 | 成人短视频在线观看视频 | 在线一级视频 | 亚洲精品久久久成人 | 水浒传删减剧情在线观看 | 男女一级毛片 | 99视频精品全部国产盗摄视频 | 亚洲国产欧美国产第一区二区三区 | 欧美一级免费大片 | 色片在线观看 | 四虎影视永久免费 | 成人一a毛片免费视频 | 一级毛片一级片 | 久久婷婷激情综合中文字幕 | 99精品欧美一区二区三区美图 | 奇米888影视 | 中文字幕 二区 三区 搜查官 | 日本不卡视频网站 | 九月婷婷天天澡天天添天天爽 | 亚洲欧洲日韩国产aa色大片 | 欧美破处在线 | 四虎影院免费在线播放 | 老司机午夜永久在线观看 | 奇米第四色在线观看 | 精品无人区乱码一区二区 |