• 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
  • 相关阅读:
    洛谷 P2607 [ZJOI2008]骑士(基环树、树形dp)
    洛谷 P1453 城市环路(基环树,树形dp)
    基环树学习笔记 & CF711D Directed Roads
    centos7 系统安全加固方案
    来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor
    作为一个C#程序员, 你应该上手Kotlin
    python中类和self讲解
    Mysql 存储引擎中InnoDB与Myisam的主要区别
    Apache和Nginx的区别
    PHP超全局变量
  • 原文地址:https://www.cnblogs.com/roger9567/p/4597462.html
Copyright © 2020-2023  润新知