Python2筆記(九)—— 繼承

繼承

# -*- coding: utf-8 -*-


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


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


stu1 = Student('stu1', 20, 90)
print stu1.score

結果:

90

一定要用 super(Student, self).init(name, gender) 去初始化父類,否則,繼承自 PersonStudent 將沒有 namegender

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

判斷類型

# -*- coding: utf-8 -*-


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


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


class Fruit(object):
    pass


stu1 = Student('stu1', 20, 90)
print stu1.score
print isinstance(stu1, Person)
print isinstance(stu1, Student)
print isinstance(stu1, Fruit)

結果:

90
True
True
False

多態

# -*- coding: utf-8 -*-


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


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

    def whoAmI(self):
        return 'I am a Student, my name is %s' % self.name


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

    def whoAmI(self):
        return 'I am a Teacher, my name is %s' % self.name


s1 = Student('s1', 20, 90)
t1 = Teacher('t1', 35)

print s1.whoAmI()
print t1.whoAmI()

結果:

I am a Student, my name is s1
I am a Teacher, my name is t1

多重繼承

# -*- coding: utf-8 -*-


class A(object):
    pass


class B(A):
    pass


class C(A):
    pass


class D(B, C):
    pass

獲取更多對象信息

type() 函數獲取變量的類型;

dir() 函數獲取變量的所有屬性;

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

getattr(s, ‘name’) # 獲取name屬性

setattr(s, ‘name’, ‘user2’) # 設置新的name屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章