python 中面向对象编程简单总结2
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