9.面向對象:類和對象、實例變量、類變量


 


類和對象:

  • 類的定義:用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
  • 類的優勢:將一個對象的功能集中於一體,便於操作,降低了代碼的重復。
  • 實例化:創建一個類的實例,類的具體對象。
  • 對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。

 

使用 class 語句來創建一個新類:

class Dog:
    #self 代表的是類的實例,代表當前對象的地址
    def __init__(self,name):##稱為類的構造函數,進行初始化成員變量
        self.name=name
    def bulk(self):###自定義函數
        print("%s:汪汪!"%self.name)

d1=Dog("奧巴馬")##創建對象,傳入__init__所需的變量,self默認自動傳入

d1.bulk()#調用方法
print(d1)

為什么要有self:

以類變量和實例變量為解釋,對於共有屬性,一般會在共有部分定義,不需要__init__,而比如說因為人人都有自己的名字,那么名字應該是一個人私有的。而類的函數由於為了節約資源,並不會拷貝給每一個對象,每一個對象都要從類的定義區中調用方法,對於涉及對象特有屬性的方法,調用方法的時候必須傳入自身對象self才能使函數獲得私有的數據,而調用這個私有的數據使用”self.變量名”.

image

 

附:

什么是新式類:https://www.cnblogs.com/wenbronk/p/7141224.html

 


實例變量和類變量:

  • 實例變量是對於每個實例都獨有的數據,而類變量是該類所有實例共享的數據
  • 變量使用的順序是:實例變量--》類變量,如果實例變量中沒有才會去類變量中找
  • 但即使是類中的變量,也是需要使用self.變量名來使用
class Dog:
    age=8
    def __init__(self,name):
        self.name=name
    def bulk(self):
        print("汪汪")

d1=Dog("包子")
d2=Dog("饅頭")
d1.age=10
print("Dog:",Dog.age,"\tD1:",d1.age,"\tD2:",d2.age)


-------------------------
結果:
Dog: 8     D1: 10     D2: 8
  • 節約論:python為了簡潔性,不會復制一份類的數據給每一個對象,每一個對象之后存有其特有的屬性,當其需要使用屬性或方法時,先看自己有沒有,如果沒有再去類中找

 


類變量的創建:

  • 可以在聲明類的時候定義

image

  • 也可以使用賦值來定義:

image

image


實例變量的創建:

  • 可以在__init__中定義

image

  • 也可以使用賦值來定義:

image

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM