1. 程式人生 > 其它 >python類、繼承

python類、繼承

  Python 是一種面向物件的程式語言。Python 中的幾乎所有東西都是物件,擁有屬性和方法。類(Class)類似物件建構函式,或者是用於建立物件的“藍圖”。

一、python 類

1 建立類

使用class關鍵字

例項

使用名為 x 的屬性,建立一個名為 MyClass 的類

class MyClass:
    x = 5

2 建立物件

現在我們可以使用名為 myClass 的類來建立物件:

例項

建立一個名為 p1 的物件,並列印 x 的值:

p1 = MyClass()
print(p1.x)

3__init__() 函式

  上面的例子是最簡單形式的類和物件,在實際應用程式中並不真正有用。要理解類的含義,我們必須先了解內建的__init__()函式。

所有類都有一個名為 __init__() 的函式,它始終在啟動類時執行。使用 __init__() 函式將值賦給物件屬性,或者在建立物件時需要執行的其他操作:

例項

建立名為 Person 的類,使用 __init__() 函式為 name 和 age 賦值:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p1 = Person("Bill", 63)

print(p1.name)
print(p1.age)

註釋:每次使用類建立新物件時,都會自動呼叫__init__() 函式。

4 物件方法

  物件也可以包含方法。物件中的方法是屬於該物件的函式。讓我們在 Person 類中建立方法:

例項

插入一個列印問候語的函式,並在 p1 物件上執行它:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def myfunc(self):
        print("Hello my name is " + self.name)

p1 = Person("Bill", 63)
p1.myfunc()

提示:self 引數是對類的當前例項的引用,用於訪問屬於該類的變數。

self 引數

  self引數是對類的當前例項的引用,用於訪問屬於該類的變數。它不必被命名為self,您可以隨意呼叫它,但它必須是類中任意函式的首個引數:

例項

使用單詞 mysillyobject 和 abc 代替 self:

class Person:
    def __init__(mysillyobject, name, age):
        mysillyobject.name = name
        mysillyobject.age = age

    def myfunc(abc):
        print("Hello my name is " + abc.name)

p1 = Person("Bill", 63)
p1.myfunc()

修改物件屬性

把 p1 的年齡設定為 40:

p1.age = 40

刪除物件屬性

del p1.age

刪除物件

del p1

二、繼承

  繼承允許我們定義繼承另一個類的所有方法和屬性的類。父類是繼承的類,也稱為基類。子類是從另一個類繼承的類,也稱為派生類。

1 建立父類

任何類都可以是父類,因此語法與建立任何其他類相同:

例項

建立一個名為 Person 的類,其中包含 firstname 和 lastname 屬性以及 printname 方法:

class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.firstname, self.lastname)

# 使用 Person 來建立物件,然後執行 printname 方法:

x = Person("Bill", "Gates")
x.printname()

2 建立子類

要建立從其他類繼承功能的類,請在建立子類時將父類作為引數傳送:

例項

建立一個名為 Student 的類,它將從 Person 類繼承屬性和方法:

class Student(Person):
    pass

例項

使用 Student 類建立一個物件,然後執行 printname 方法:

x = Student("Elon", "Musk")
x.printname()

新增__init__()函式

  到目前為止,我們已經建立了一個子類,它繼承了父類的屬性和方法。我們想要把__init__()函式新增到子類(而不是pass關鍵字)。

註釋:每次使用類建立新物件時,都會自動呼叫 __init__() 函式。

例項

為Student 類新增 __init__() 函式:

class Student(Person):
    def __init__(self, fname, lname):
        # 新增屬性等

當您新增 __init__() 函式時,子類將不再繼承父的 __init__() 函式。

註釋:子的 __init__() 函式會覆蓋對父的 __init__() 函式的繼承。

如需保持父的 __init__() 函式的繼承,請新增對父的 __init__() 函式的呼叫:

例項

class Student(Person):
    def __init__(self, fname, lname):
        Person.__init__(self, fname, lname)

使用 super() 函式

Python 還有一個super()函式,它會使子類從其父繼承所有方法和屬性:

例項

class Student(Person):
    def __init__(self, fname, lname):
        super().__init__(fname, lname)

新增屬性

例項

把名為graduationyear的屬性新增到Student類:

class Student(Person):
    def __init__(self, fname, lname):
        super().__init__(fname, lname)
        self.graduationyear = 2019

新增方法

例項

把名為welcome的方法新增到 Student 類:

class Student(Person):
    def __init__(self, fname, lname, year):
        super().__init__(fname, lname)
        self.graduationyear = year

    def welcome(self):
        print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)