zoukankan      html  css  js  c++  java
  • 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)多态:传入一个变量可以被多个类调用

  • 相关阅读:
    羊皮卷的故事第三章
    羊皮卷的故事第五章
    羊皮卷的故事第八章羊皮卷之一
    羊皮卷的故事第十一章羊皮卷之四
    羊皮卷的故事第四章
    羊皮卷的故事第十章羊皮卷之三
    羊皮卷的故事第九章羊皮卷之二
    羊皮卷的故事第十二章羊皮卷之五
    POJ3264 Balanced Lineup RMQ
    HDUPattern and Text 枚举
  • 原文地址:https://www.cnblogs.com/hpzyang/p/10204710.html
Copyright © 2011-2022 走看看