Python学习总结【连载】(十四)

Python学习总结【连载】(十四)

2018.06.29 Juttachen


概述

  • 48 类的多态
  • 49 运算符的重载
  • 50 多继承
  • 51 对象的内存管理
  • 52 包的使用

四十八、类的多态

dog1.shout()多态:就是一个事物有多种形态。继承就会产生多态
类的多态:通过过继承,同一个方法可以有多种实现

    class Animal:
        def shout(self):
        print('嗷嗷叫!')

    class Cat(Animal):
        def shout(self):
        print('喵喵叫!')

    class Dog(Animal):
        def shout(self):
            print('汪汪叫!')

    animal1 = Animal()
    animal1.shout()
    cat1 = Cat()
    cat1.shout()
    dog1 = Dog()

四十九、运算符的重载

类中可以通过相应的模块方法。来实香的比较,来实现对象的比较运算(>,<)和加减运算(+,-)。
实现后就可以通过运算符'>';'<'来判断对象的大小。通过运算符‘+’和‘-’来求两个对象的和。

怎么重载?
> -->gt
< -->lt
+ -->add
- -->sub

    class Student(object):
        """docstring for Student"""
        def __init__(self, name='',age=0,score=0):
            super(Student, self).__init__()
            self.name = name
            self.age = age
            self.score = score

        # 重载'>'符号
        # 对象1>对象2
        # self ->对象1;other ->对象2
        def __gt__(self,other):
            # 怎么实现就看怎么判断大于的
            return self.age > other.age

    stu1 = Student('ming',18,90)
    stu2 = Student('hua',20,80)
    print(stu1 > stu2)
    print(stu1 < stu2)

说明:如果大于比较和小于比较的内容是一样的,就只需要重载其中一个符号就可以了,使用另一个的时候系统会自动取反
一次重载只能判断一个方面
+,- 不能同时重载,要用加的时候就重载加,要用减的时候就重载减

五十、多继承

python支持多继承

    class Animal:
        """docstring for Animal"""
        def __init__(self,age,name):

            self.age= age
            self.name =name

    class Fly:
        """docstring forFly"""
        def __init__(self, arg):
            self.arg = arg

Bird同时可以继承Animal,Fly类数

    class Bird(Animal,Fly):
        """docstring for Bird"""
        pass

注意:实际开发中,不到万不得已不建议使用多继承

五十一、对象的内存管理

对象值是存在堆中的,Python自动回收的
掌握:对象到底什么时候被销毁(回收)

栈中内容是系统自动创建自动销毁的,不需要管理。平时说的内存管理指的是堆中的内存的管理:
Python中能够存到堆里面的数据,全是对象

Python中管理内存的机制:
python是通过引用计数来管理内存的:就看一个对象的引用计数的值是否为0,为0就销毁。
让一个变量存储对象的地址,那么这个变量就是对象的引用;如果变量存别的值或者删除这个变量,都会让引用消失

应用:如果想要对象提前被销毁,就要删除其所有的引用

    class Person(object):
        """docstring for Person"""
        def __init__(self, name='',age = 0, scores = []):
            self.name = name
            self.age = age
            self.scores = scores

    # p1是一个变量,变量存的是对象的地址;变量p1本身是在栈里面的
    # Person()返回值才是对象
    p1 = Person()
    p2 = p1
    dict1 = {'aaa':p1}
    list1= [p1]

五十二、包的使用

函数 ---> 对实现功能的代码的封装
类 ---> 对属性和功能进行封装
模块 ---> 对多个函数或者多个类进行封装
包 ---> 对多个模块进行封装

举例:对时间操作的相关功能
--->1.日期对应的时间(年月日 -> 获取当天的时间,获取指定某一天对应的星期,计算那一年是闰年)
--->2.时分秒(秒钟,计算小时数,分数,时间相加)
--->3.时间戳(时间转换,时间加密)

创建python Packege,就可以了(和普通文件夹里区别是有一个init.py文件)
通过import或者from..import..就可以调用了

你可能感兴趣的:(Python学习总结【连载】(十四))