python自學成才之路 類詳細用法

python類簡介

python是一門面向對象編程的語言,python的類和java中的類思想上有很多一樣的地方,比如python類也是通過class修飾,裏面也有成員屬性,成員方法,也有構造函數,也可以繼承和重寫父類方法等等,但是和jave的類在寫法上有很大的不同。

創建一個類

class Animal():

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        # 私有屬性
        self._sex = sex
        # 默認屬性
        self.id = hash(self.name + str(self.age))

    def animalDesc(self):
        print("this is " + self.name + ", its age is " + str(self.age))

    def otherInfo(self):
        pass

    def getId(self):
        return self.id

    def getSex(self):
        print(self._sex)

博主這裏不會對類做面面俱到的說明,默認看這篇文章的騷年已經有了一些面向對象的基本常識了(比如對java的類有一定了解),這裏只會挑一些重點做說明:
1.class Animal() 在java中創建class時是沒有這個()的,python這個()的是用來添加要繼承的類,python允許多繼承,博主這裏沒有用到繼承,所以爲空。
2. __init__這個方法就是類的構造方法,寫法比較特殊,在java中類的構造方法和類名是一樣的,python中構造方法統一爲__init__。
3. self指的是當前實例本身,類似於java中的this,但是java中的this可以缺省,而python中的self必須存在(靜態方法除外)。python會默認將自身對象實例傳遞給類中函數的第一個參數。
4. self.name,self.age都是屬性,在java中屬性是單獨定義的,在python中屬性是放在構造方法中通過self.xxx來定義的。
5. self._sex這個屬性和self.name,self.age這樣的屬性不一樣,self._xxx這樣的屬性是私有屬性,只能在類內部訪問,不能通過對象實例直接訪問。
6. self.id這個是默認屬性,在創建對象實例時不需要傳遞id這個參數。

實例的創建和使用

python中創建對象實例不需要使用new關鍵字,直接創建就可以。

    animal = Animal('pig', 2, 'female')
    animal.animalDesc()
    print('animal is ' + animal.name + ', sex is ' + animal.getSex())

類繼承

python中實現了多繼承,這和java不一樣,java裏面只能是單繼承。雖然說可以使用多繼承,但是繼承一個類就能搞定的事最好不要繼承多個類,程序越簡單越好。

class Pig(Animal):

    def __init__(self, name, age, weight):
        super().__init__(name, age, 'female')
        # 子類特有屬性
        self.weight = weight

    # 父類方法重寫
    def otherInfo(self):
        print("the pig weights " + str(self.weight) + " kg.")

    # 子類特有方法
    def pigEat(self):
        print("I can eat more.")

上面是一個pig類,它繼承自Animal類。
1.在子類的構造方法中必須先調用父類的構造方法,這個和java是一樣的。
2.子類可以有自己的特有屬性。
3.子類可以重寫父類的方法。
4.子類可以有自己的特有方法。

導入模塊中的類

前面有講過通過import導入模塊中的函數(傳送門),也可以通過import導入模塊中的類。
比如我新建一個AnimalTest.py文件,可以在AnimalTest.py文件中做如下導入操作:
1.導入整個模塊 import Animal

pig = Animal.Pig("Pig", 2, 200)

2.導入模塊中的部分類 from Animal import Animal,Pig

pig = Pig("Pig", 2, 200)

3.通過*導入模塊中的所有類 from Animal import *

pig = Pig("Pig", 2, 200)

4.使用as給模塊中的類創建別名 from Animal import Pig as p

pig = p("Pig", 2, 200)

靜態方法

python中也支持靜態方法,通過給一個方法加上@staticmethod註解,該方法就變成了一個靜態方法,靜態方法中不能存在self參數,靜態方法可以被類直接調用。如下所示:

    @staticmethod
    def classDesc():
        print("this is a dog class")

  # 在Dog類中定義一個classDesc方法,使用@staticmethod註解爲靜態方法
  # 通過Dog類可以直接調用靜態方法
  Dog.classDesc()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章