美文网首页
day_013 Python中的面对对象补充

day_013 Python中的面对对象补充

作者: HavenYoung | 来源:发表于2018-08-02 17:22 被阅读0次

一、重写

继承后,子类可以拥有除父类继承以外的其他属性和方法
父类不能使用在子类中添加的属性和方法
1.关于方法
a.在子类中可以添加其他的方法
b.重写:
1)完全重写
重新实现从父类继承下来的方法,重写后,子类再调用这个方法的时候,就调用子类的

2)保留父类实现的类容,再添加新的功能

对象和类调用方法的过程:先看当前类是否有这个方法,没有才去查看父又没有相应的方法,如果父类没有就看父类的父类,直到找到基类(object)为止

示例:

class Animal(object):
    """动物类"""

    def __init__(self):
        self.age = 0
        self.color = ''

    def eat(self):
        print('eating~~~')

    def shout(self):
        print('barking')

    @classmethod
    def get_number(cls):
        return  100


class Dog(Animal):
    """狗类"""

    def look_after(self):
        print('看家')

    # 重写父类的shout
    def shout(self):
        print('啊汪')

    def eat(self):
        # 保留父类eat的功能
        super().eat()
        print('bone')

    @classmethod
    def get_number(cls):
        # 保留父类的类方法的功能的时候,还是super().类方法
        print(super().get_number())


if __name__ == '__main__':
    dog = Dog()
    dog.age = 2
    print(dog.color)
    dog.shout()
    dog.look_after()

结果:

啊汪
看家

二、添加属性

对象属性的继承方法:是通过继承init方法来继承的对象属性

给当前类添加对象属性:重写init方法,注意:如果要保留父类的属性,需要使用super().init方法

三、运算符的重载

1.重载:一个类中可以有多个名字相同的方法,就叫重载。python中不支持
2.运算符重载(重新定义运算符运算的过程)
>、<、+、-
大于和小于符号只需要重载其中的一个,另外一个的结果,直接是重载的结果取反

示例:

class Student:
    def __init__(self, name='', age=0, height=0):
        self.name = name
        self.age = age
        self.height = height

    # 重载:>
    """
    self > other
    """
    def __gt__(self, other):
        # 比较对象1>对象2的时候是比较的他们的height属性
        return self.height > other.height

    # 重载:<
    def __lt__(self, other):
        return self.age < other.age

    # 重载:+
    def __add__(self, other):
        return self.age + other.age

    # 重载:-
    def __sub__(self, other):
        return self.age - other.age


if __name__ == '__main__':
    stu1 = Student('a', 18, 160)
    stu2 = Student('b', 19, 170)

    if stu1 > stu2:
        print('----')

    if stu1 < stu2:
        print('====')

结果:

====

四、内存管理

  • python内存管理的原理
    内存中有两个特殊的区域:栈、堆
    栈:栈中的内存是系统自动管理的(内存的开辟和内存的释放) --- 作用域结束,内存就释放
    堆:堆中的内存都需要写程序去开辟和释放的(python中这个过程也已经自动化)

  • 原理:堆中的数据到底是什么时候释放的
    看一个对象有几个引用,当一个对象没有引用的时候,对象对应的内存空间就被释放
    (引用计数机制)
    引用:存储对象地址的变量
    将对象添加到容器中,对象的引用会+1

五、包的使用

封装:
对一个功能的封装 --- 函数
对多个功能的封装 --- 模块和类
对多个数据进行封装 --- 类、字典
对多个类进行封装 --- 模块
对多个模块进行封装 --- 包(包含一个init.py文件的文件夹)

相关文章

  • day_013 Python中的面对对象补充

    一、重写 继承后,子类可以拥有除父类继承以外的其他属性和方法父类不能使用在子类中添加的属性和方法1.关于方法a.在...

  • 2019-10-23

    python面向对象编程总结 python中的对象:在其...

  • 2. Python3源码—浮点对象

    2.1. 浮点对象 浮点对象是“定长对象”。 2.1.1. Python中的创建 Python中浮点对象创建最重要...

  • 3. Python3源码—整数对象

    3.1. 整数对象 整数对象是“变长对象”。 3.1.1. Python中的创建 Python中整数对象最重要的创...

  • python对象和垃圾回收

    1. python对象 python使用对象模型来存储数据,python中万物皆对象。python对象有三个特性:...

  • 1. Python3源码—内建对象

    1.1. Python内的对象 Python中的类和实例都是通过Python内的对象来实现的。Python中已经预...

  • Python面对对象

    面向对象编程 是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些...

  • python中一切皆对象

    python中一切皆对象 python中的一切皆对象更加彻底在python中的一切皆对象比Java中的一切皆对象更...

  • 元类介绍

    Python中的类 记住一句话:在Python中万事万物皆对象python中的类也是对象,当一个对象具有创建对象的...

  • Python面试

    Python中万物皆对象,对象有可变(mutable)与不可变(immutable)对象 在python中,str...

网友评论

      本文标题:day_013 Python中的面对对象补充

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