美文网首页
面向对象的三大特征:封装、继承和多态

面向对象的三大特征:封装、继承和多态

作者: rensgf | 来源:发表于2021-04-17 23:52 被阅读0次

    类,对象,属性,方法

        class TheFirstDemo:
            '''这是一个学习Python定义的第一个类'''
            # 下面定义了一个类属性
            add = 'http://c.biancheng.net'
            # 下面定义了一个say方法
            def say(self, content):
                print(content)
    

    在创建类时,我们可以手动添加一个 ____init__() 方法,该方法是一个特殊的类实例方法,称为构造方法(或构造函数)。init() 方法可以包含多个参数,但必须包含一个名为 self 的参数,且必须作为第一个参数.
    定义类的对象(实例化)的方法: 类名(参数)
    定义类时,如果没有手动添加 init() 构造方法,又或者添加的 init() 中仅有一个 self 参数,则创建类对象时的参数可以省略不写。
    self 代表该方法的调用者,即谁调用该方法,那么 self 就代表谁。

       class Person:
            def __init__(self):
                print("正在执行构造方法")
            # 定义一个study()实例方法
            def study(self):
                print(self,"正在学Python")
        zhangsan = Person()
        zhangsan.study()
        lisi = Person()
        lisi.study()
    

    上面代码中,study() 中的 self 代表该方法的调用者,即谁调用该方法,那么 self 就代表谁。因此,该程序的运行结果为:

    正在执行构造方法
    <main.Person object at 0x0000021ADD7D21D0> 正在学Python
    正在执行构造方法
    <main.Person object at 0x0000021ADD7D2E48> 正在学Python
    类方法与实例方法
    python类封装

    1.默认情况下,Python 类中的变量和方法都是公有(public)的,它们的名称前都没有下划线(_);
    2.如果类中的变量和函数,其名称以双下划线“__”开头,则该变量(函数)为私有变量(私有函数),其属性等同于 private。
    

    python类继承
    子类拥有父类所有的属性和方法,即便该属性或方法是私有(private)的。使用多继承经常需要面临的问题是,多个父类中包含同名的类方法。对于这种情况,Python 的处置措施是:根据子类继承多个父类时这些父类的前后次序决定,即排在前面父类中的类方法会覆盖排在后面父类中的同名类方法。
    super():子类中定义构造方法,必须在该方法中调用父类的构造方法。调用父类构造方法的方式有 2 种,分别是:

    1.类可以看做一个独立空间,在类的外部调用其中的实例方法,可以向调用普通函数那样,只不过需要额外备注类名(此方式又称为未绑定方法);
    2.使用 super() 函数。但如果涉及多继承,该函数只能调用第一个直接父类的构造方法。
    

    super().init(self,···)

    class People:
        def __init__(self,name):
            self.name = name
        def say(self):
            print("我是人,名字为:",self.name)
    class Animal:
        def __init__(self,food):
            self.food = food
        def display(self):
            print("我是动物,我吃",self.food)
    class Person(People, Animal):
        #自定义构造方法
        def __init__(self,name,food):
            #调用 People 类的构造方法
            super().__init__(self,name)
            #super(Person,self).__init__(name) #执行效果和上一行相同
            #People.__init__(self,name)#使用未绑定方法调用 People 类构造方法
            #调用其它父类的构造方法,需手动给 self 传值
            Animal.__init__(self,food)    
    per = Person("zhangsan","熟食")
    per.say()
    per.display()
    

    相关文章

      网友评论

          本文标题:面向对象的三大特征:封装、继承和多态

          本文链接:https://www.haomeiwen.com/subject/aqbpgktx.html