天天看點

Python類和對象怎麼使用

現代程式設計語言幾乎都支援面向對象程式設計,面向對象程式設計是最有效的軟體編寫方法之一。你可以用類和對象來表示現實當中的任何的事物和行為。

編寫類時,你會定義某一類東西通用的特征和行為。然後通過類建立對象,每個對象都自動具備這個類的特征和行為,還可以賦予每個對象獨特的個性。

通過這種方式,你幾乎可以把看到的任何事物用代碼來表示。 比如我們來描述一下“我開車去上班,車到半路沒油了,于是我先加油” 這個普通的場景。

在這個場景中,涉及到的人和物,有 “我”, "車", “油”, 這些人和物就可以通過對象來表示。 我是一個人,屬于人這個類, 我的車屬于 車這個類, 油就是屬于油這個類。

還有動作和行為, 開車屬于我的動作,加油也是屬于我的動作。

出了動作和行為外,還有屬性和狀态,比如車沒油, 加完油以後,有油了。

類和對象的文法稍微有點複雜,要了解确實有一點難度,這也是大多數學習程式設計的人最後選擇了放棄。 但其實隻要學會把生活的當中的示例抽象出來,類和對象沒有想的那麼難。

什麼是類

類是具備共同特征和共同行為的事物的統稱。 所謂人以群分,物以類聚。

類的表示通常采用駝峰式命名。

class Car:
 pass

class Mobile:
 pass      

什麼是對象

對象(Object)是一類事物中的一個成員(個體), object 的中文是東西,對象又被稱為執行個體,是一個實實在在存在的東西。

  • 我的車
  • 你的車
  • 隔壁鄰居的車
Python類和對象怎麼使用

通過類得到對象,這個過程叫執行個體化,類似函數的調用。

my_car = Car()
your_car = Car()      

類和對象的關系

類就相當于建造房子時的施工圖紙(blueprint),是一個模闆,是負責建立房子(對象)的,通過類可以得到對象。 就好像玩植物大戰僵屍的遊戲,上方的卡片就相當于類, 拖動卡片就可以在下方的空地上得到一個對象。

Python類和對象怎麼使用
my_car = Car()
car_class = Car
print(type(my_car), type(car_class))      

屬性

整個類的特征,所有成員都一緻,又被稱為類變量。

class Car:
    wheel = True
    material = ["塑膠", "鐵", "鋁合金", "橡膠"]      

擷取類屬性

print(Car.wheel)      

執行個體擷取類屬性

Car().wheel      

修改類屬性

Car.wheel = False      

​__init__​

​ 初始化方法

*​

​__init__​

​* 叫初始化方法,代表一個對象産生時的初始化過程。 比如一部手機生産出來後,需要貼 logo,設計型号,桌面,螢幕亮度。

class Mobile:
    def __init__(self, brand, model, brightness):
        self.brand = brand
        self.model = model
        self.brightness = brightness
        print("Mobile 的品牌:{},型号:{},亮度:{}".format(brand, model, brightness))      

這個初始化方法有點特殊,在執行個體化一個對象時,會自動調用這個方法。 方法的第一個參數是 self, 它是一個固定的文法,表示對象本身,其他的 brand, model, brightness 這些參數和普通的函數參數一樣,改傳值的時候傳入實際參數就可以。

self.brand 這樣的文法表示定義執行個體屬性,當傳入一個具體的參數時,就能指派成為一個對象的屬性。

初始化方法不能有傳回值。

self

  • self, 我自己,這個。這個人的名字​​self.name​​
  • self 表示在類裡面對象本身。
  • 類外面定義一個變量。
  • self 可以換成其他的變量名,但是是規範,強烈不建議更換。
class Mobile:
    def __init__(self, brand):
        self.brand = brand
        print(self)

redmi = Mobile("redmi")
print(redmi)      

類變量和執行個體變量

  • 類變量和類屬性一樣。
  • 執行個體變量可以通路類變量,
  • 類變量不能能通路執行個體變量

方法(Method)

執行個體方法是用得最多的方法類型,一般預設情況下就是執行個體方法,通過執行個體調用。

# 初始化方法

# 執行個體方法的定義
def drive(self):
    print('{} 正在開車'.format(self.name))      

類方法是通過類調用的方法,可以用來作為備用的構造函數,初始化一個類。

class Dog:

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

    @classmethod
    def gouzao(cls, name1, name2):
     return cls(name1 + name2)

a = Dog('yuze')
print(a)

b  = Dog.gouzao('yuze','wang')
print(b)      

繼承

Python類和對象怎麼使用

繼承充分發揮了面向對象的優勢,編寫類時,并非總是要從空白開始。如果要編寫的類是另一個現成類的特殊版本,可使用繼承 。一個類繼承另一個類時,将自動獲得另一個類的所有屬性和方法。原有的類稱為父類 ,而新類稱為子類 。子類繼承了父類的所有屬性和方法,同時還可以定義自己的屬性和方法。

在寫代碼時,我們可以利用别人已經寫好的類,我們自己定義一個類繼承别人寫的類,就不需要從零開始寫了,大大提高了代碼的編寫速度。

重寫父類方法

class Mobile:
    def __init__(self, brand):
        self.brand = brand
        print(self)
    
    def call():
        print("calling")
        
class Iphone(Mobile):
    def call():
        print("Iphone Calling")      

Super

class Animal:
    def run(self):
        print("我是一隻動物,我在跑")

class Dog(Animal):
    def run(self):
        super().run()
        print("狗在跑")

Dog().run()      
class Animal:

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

    def run(self):
        print("{} am running".format(self.type))
        

class Dog(Animal):
    def __init__(self):
        Animal.__init__(self, 'Dog')
        
a_dog = Dog()
a_dog.run()