继承
# -*- 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) 去初始化父类,否则,继承自 Person 的 Student 将没有 name 和 gender。
函数**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属性