Python學習筆記六(類的繼承)

來源:互聯網
上載者:User

單繼承
具體的文法就不說了。我很關心的是它到底繼承了什麼
單繼承條件下很簡單。類的靜態變數、類的靜態方法、執行個體的方法、執行個體的成員變數、基類的建構函式、基類的解構函式都可以從父類中繼承過來。私人方法和私人變數是不能繼承的。具體看測試代碼:
class Student:
    '''this test class'''
    name = 'ss'
    age = 13
    def __init__(self):
        self.name='bb'
        self.addr="shanghai"
        self.__love="man"
        print "init..."
    def __del__(self):
        print "dead..."
    def Run(self):
        print 'people Run'
    @staticmethod 
    def RunStatic():
        print "In Static method..."
    def __Good(self):
        print "good"
class MiniStudent(Student):
    pass
#類
print MiniStudent.name
print MiniStudent.age
print MiniStudent.RunStatic()

print "----================--------"
#執行個體
mini = MiniStudent()
print mini.name
print mini.age
print mini.Run()
print mini.addr

多繼承
多繼承下,情況明顯比這複雜而且,而且會產生多個基類覆蓋函數的問題。很幸運,C#中已經沒有了多繼承,你只能從多個介面繼承。正因為這樣,我感覺這種多繼承不應該被濫用,否則代碼會很晦澀。下面這個例子你就可以看到。在上面的例子中,我多添加了一個StudentA的類。 具體看測試代碼:

class StudentA:
    def __init__(self):
        print 'init-studenta'
    def GoCar(self):
        print "Go Car"
class Student:
    '''this test class'''
    name = 'ss'
    age = 13
    def __init__(self):
        self.name='bb'
        self.addr="shanghai"
        self.__love="man"
        print "init..."
    def __del__(self):
        print "dead..."
    def Run(self):
        print 'people Run'
    @staticmethod 
    def RunStatic():
        print "In Static method..."
    def __Good(self):
        print "good"
class MiniStudent(Student,StudentA):
    pass
#類

mini = MiniStudent()
print mini.name
print mini.age
print mini.Run()
print mini.addr

現在這個例子是可以通過的,但如果你把
class MiniStudent(Student,StudentA)
修改成
class MiniStudent(StudentA,Student)
這個代碼就通不過了。告訴你mini.addr沒有定義。
其實是StudentA的建構函式覆寫了Student的函數,也就是說只調用了StudentA.__init__()的方法。下面就談到繼承中的覆寫問題。

繼承中的覆寫
從上面的經驗可以得到
Python的多繼承,但有以下幾點需要注意:
1. 繼承方法的調用和基類聲明順序有關(最先使用的覆寫之後的方法)。
2. 基類__init__()、__del__() ,如果希望都使用,請顯示的調用,否則很容易出錯。

class StudentA:
    def __init__(self):
        print 'init-b'
class Student:
    def __init__(self):
        print 'init-a'
class MiniStudent(Student,StudentA):
    def __init__(self):
        StudentA.__init__(self)
        Student.__init__(self)
#執行個體
mini = MiniStudent()

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.