1.python中继承的特点:
(1)总是从一个类继承,默认为object类
(2)不要忘记调用super.__init__方法来初始化父类的方法
def __init__(self,args):
super(Subclass,self).__init__(args)
pass
简单例子
class Person(object):
def __init__(self,name,gender):
self.name = name
self.gender = gender
class Student(Person):
def __init__(self,name,gender,score):
#super(Student,self)方法调用返回当前类继承的父类
#如果没有下面的调用,那么Student类中就没有name和gender属性
super(Student,self).__init__(name,gender)
self.score = score
s = Student("roger","male",99)
print s.name,s.gender,s.score
2. 使用isinstance(obj,class)来判断obj是否是class类的一个实例
3.继承和多态需要注意的地方
(1)python是动态语言,动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。
(2)如果实例中没有相应的方法和属性,那么它会顺着继承链向上寻找。如果是方法,它就会调用最近的方法;如果是属性,就会在实例上绑定一个属性。
(3)多态概念一致,任何能引用父类的地方,一定能使用子类
4.定义类对象之后获取相关属性
(1)type(obj) 返回变量类型
(2) dir(obj) 返回变量所有属性
(3)getattr(obj,attrname) 获取属性: attrname
(4)setattr(obj,attrname,attrvalue): 设置新的属性
(5)Python 中的变长参数:*args(只含值), **kwargs(包含键值对),注意到两者调用上是有区别的。
#coding=utf8
__author__ = 'Administrator'
# 当函数的参数不确定时,可以使用*args和**kwargs。*args没有key值,**kwargs有key值
def fun_var_args(farg, *args):
print 'args:', farg
for value in args:
print 'another arg:',value
fun_var_args(1, 'two', 3, None)
class Person(object):
def __init__(self, name, gender, **kw):
self.name = name
self.gender = gender
for k, v in kw.iteritems():
setattr(self, k, v)
p = Person('Bob', 'Male', age=18, course='Python')
print p.age
print p.course