Python面向对象、继承和多态

面向对象变成的基本思想:类和实例

用于定义抽象类型---------------------人-----------------------------class  Person(object):------------------数据封装class Person(object):

                                                                                                    pass                                                                 def __init__(self,name):

                                                                                                                                                                                 self.name = name

实例根据累的定义被创建出来---------小明、小红-----------------p1 = Person()------------------------------p1 = Person('xiaoming')

                                                                                                p2 = Person()                                    p2 = Person('xiaohong')

(1)类关键字class,类名以大写字母开头,创建实例使用类名+()

(2)类属性只调用一次(和实例化多少次没有关系);__init__()方法中的属性是实例属性,每次实例化一次就调用一次

(3)实例小明、小红除了地址不一样意外,没有什么其他不同,现实世界中区分小明、小红要依靠他们各自的名字、性别、生日等属性,所以可以在类中的__init__方法中添加属性name,在实例化时输入参数,然后取值p1.name就可以了

(4)__init__()方法的第一个参数必须是self,后续参数自由指定,实际情况需要传入什么参数就定义什么参数,和定义函数没有任何区别

(5)__init__()方法中,只有以双下划线开头__xxx的属性不能直接被外部访问,预定义属性通常用__xxx__表示,作为预留字段

(6)类是模板,实例是根据模板创建的对象,所以对象创建完以后,无论在外部怎么改变对象的属性和方法,模板中的数据是完全不受影响的。

(7)实例属性每个实例各自拥有,互相独立,模板属性有且仅有一份,所有实例共同拥有

(8)模板属性和实例属性重名时,实例属性优先级高(注意:一般实例属性方法和模板属性方法名称不要定义一样)

(9)私有类属性和实例属性不能在外部用类和实例直接访问,但是可以在内部__init__方法中print私有类属性Person.__count和实例属性self.__name,这样就可以访问了

(10)实例和类中的属性调用方式:实例p1.属性,,实例p1.方法,,类Person.属性,,类Person.方法

在class中第一的全部是实例方法,实例方法第一个参数self是实力本身

(11)实例方法:def get_grade(self):,第一个参数为self,方法中可以直接调用实例属性,,调用实例方法必须在实例上调用

(12)类方法:@classmethod,参数为cls表示类本身,类方法在类上调用

 继承和多态

class Person(object):

    def __init__(self, name, gender):

        self.name = name

        self.gender = gender

class Student(Person):

    def __init__(self, name, gender, school, score):

        super(Student, self).__init__(name, gender)-------初始化父类的name, gender属性

        self.school = school-------只需要定义父类没有的属性

        self.score = score

(1)继承父类的属性和方法

(2)继承向上兼容,Student是Person,Person不是Student

(3)继承的特点:1总是从某各类继承,如果没有就写object,2需要调用super().__init__(args)放大初始化父类

(4)多重继承,多重继承时如果被继承了两次,但是__init__()方法也只调用一次

(5)多态:传入一个变量可以被多个类调用

posted @ 2019-01-01 14:07  琥珀主yang  阅读(231)  评论(0编辑  收藏  举报