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 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌 YouTube 正测试屏蔽“广告拦
- 下一篇: 达达集团一季报:总营收26亿元,京东到家