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..就可以调用了
网友评论