日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取

發布時間:2023/12/19 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

屬性初始化:

一定要用super(Teacher, self).__init__(name, gender)去初始化父類,否則,繼承自 Person 的 Teacher 將沒有 name 和 gender。

class Person(object):def __init__(self, name, gender):self.name = nameself.gender = genderclass Teacher(Person):def __init__(self, name, gender, course):super(Teacher, self).__init__(name, gender)self.course = courset = Teacher('Alice', 'Female', 'English') print t.name print t.course

函數super(Teacher, self)將返回當前類繼承的父類,即 Person ,然后調用__init__()方法,注意self參數已在super()中傳入,在__init__()中將隱式傳遞,不需要寫出(也不能寫)

類型判斷:

函數isinstance()可以判斷一個變量的類型,既可以用在Python內置的數據類型如str、list、dict,也可以用在我們自定義的類,它們本質上都是數據類型。

class Person(object):def __init__(self, name, gender):self.name = nameself.gender = genderclass Student(Person):def __init__(self, name, gender, score):super(Student, self).__init__(name, gender)self.score = scoreclass Teacher(Person):def __init__(self, name, gender, course):super(Teacher, self).__init__(name, gender)self.course = courset = Teacher('Alice', 'Female', 'English')print isinstance(t, Person) # True print isinstance(t, Student) # False print isinstance(t, Teacher) # True print isinstance(t, object) # True

可以觀察出在一條繼承鏈上,一個實例可以看成它本身的類型,也可以看成它父類的類型。

多態:

Python中的多態是指,在子類中構建和父類同名的方法。這時子類實際上擁有自己的方法以及從 父類繼承的同名方法,但通過子類調用該方法時總是先查找它自身的定義,如果沒有定義,則順著繼承鏈向上查找,直到在某個父類中找到為止

由于Python是動態語言,所以,傳遞給方法的參數不一定是子類或者父類的類型。任何數據類型的實例都可以,只要它有一個同名的方法即可。

多繼承:

除了從一個父類繼承外,Python允許從多個父類繼承,稱為多重繼承。多重繼承的目的是從兩種繼承樹中分別選擇并繼承出子類,以便組合功能使用。

B和C繼承自A。D 同時繼承自 B 和 C,也就是 D 擁有了 A、B、C 的全部功能。多重繼承通過 super()調用__init__()方法時,A 雖然被繼承了兩次,但__init__()只調用一次。這樣起到簡化作用。

獲取對象信息:

用 type() 函數獲取變量的類型,它返回一個 Type 對象:

type(123) # <type 'int'> s = Student('Bob', 'Male', 88) type(s) # <class '__main__.Student'>

其次,可以用 dir() 函數獲取變量的所有屬性:

dir(s) ''' ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'gender', 'name', 'score', 'whoAmI'] '''

去掉__xxx__這類的特殊屬性,只保留自己定義的屬性。使用filter()函數:

print filter(lambda x: x[0]!='_', dir(s))

dir()返回的屬性是字符串列表,如果已知一個屬性名稱,要獲取或者設置對象的屬性,就需要用 getattr() 和 setattr()函數了:

getattr(s, 'name') # 獲取name屬性 'Bob' setattr(s, 'name', 'Adam') # 設置新的name屬性

總結

以上是生活随笔為你收集整理的Python 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。