DAY15 Python基础:operate class 2018-06-28

01-polymorphism 多态

02-operator overload 运算符重载

03-multiple inheritance 多继承

04-object memory management 对象的内存管理

05-the application of package 包的应用


01-polymorphism 多态

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

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()
dog1.shout()

02-operator overload 运算符重载

需要对象进行运算操作的时候,进行运算符重载
类中可以通过实现相应的魔法方法,来实现对象的比较运算(>、<)和加减运算(+、-)
实现后就可以通过运算符'>'和'<'来判断对象的大小。通过运算符'+''-'来求两个对象的和与差

怎么重载

> -->__gt__
< -->__lt__
+ -->__add__
- -->__sub__

class Student:

    def __init__(self, name='', age=0, score=0):
        self.name = name
        self.age= age
        self.score = score

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

    # 重载'<'符号
    def __lt__(self, other):
        return self.score < other.score

说明:如果大于比较和小于比较的内容是一样的,只需要重载其中一个符号就可以了

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


    #重载'-'
    def __sub__(self, other):
        return self.score - other.score
stu1 = Student('小明', 18, 90)
stu2 = Student('小花', 20, 80)

print(stu1 < stu2)
print(stu1>stu2)
print(stu1 + stu2)
print(stu1 - stu2)

03-multiple inheritance 多继承

**python支持多继承

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


class Fly:
    def fly(self):
        print('飞起来')

Bird类同时继承Animal类和Fly类。同时拥有这两个类的属性和方法

class Bird(Animal, Fly):
    pass


b1 = Bird()
print(b1.name)
b1.fly()

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

04-object memory management 对象的内存管理

对象值是存在堆中,python自动去回收的

掌握,对象到底什么时候才会被销毁(回收)

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

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

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

class Person:

    def __init__(self, name='', age=0, scores=[]):
        self.name = name
        self.age = age
        self.scores = scores


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

p1 =10
del p2

05-the application of package 包的应用

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

包的创建:pycharm新建file里的python package
举例:对时间操作的相关功能
--> 1.日期对相应的时间(年月日 -> 获取当天的时间\获取指定哪一天对应的星期\计算哪一年是闰年)
----> 2.时分秒 (秒钟/计算小时数/分数/时间相加等)
----> 3.时间戳 (时间转换、时间加密)

通过from--import 和 import导入包的内容

from my_time import my_date
my_date.get_date()


import my_time
my_time.my_date.get_date()

你可能感兴趣的:(DAY15 Python基础:operate class 2018-06-28)