print('---面向对象-----')
'''
知识点汇总
1-面向对象的引入:
1-先找出相应的对象
2-把这些涉及的对象的关系进行组网
2-类/实例
1-类:
1-现实不存在--抽象的概念--人类--鸟类
2-一类具有相同特征的事物的统称!
2-类里面有
1-静态---属性(特征)---变量
2-动态---方法(行为)---函数
3-实例---也叫 对象
1-在这个类里面实际存在的个体
2-类是实例的抽象化概念
3-实例是类的具体实例化体现
4-实例化操作:
1-类里面的变量--属性
2-类里面的函数--方法
3-创建实例 t1 = Tiger()
5-静态属性和实例属性
1-静态属性:
1-也叫类属性
2-它属于整个类的
3-用法:1-类.属性 2-实例.属性
2-实例属性:
1-这个属性是 那个实例的,不属于整个类---其他实例不能共享
2-定义在 初始化方法 __init__ 里
3-一般在创建实例的时候就给定
4-只要创建实例--def __init__(self):初始化方法肯定会调用
5-self 只是代表词,并不是关键字--可以替换,但不建议替换!不能缺省
6-id(self)
7-实例化属性---只能 实例.属性
8- self 这个实例的本身
6-方法:
1-静态方法
1-属于整个类
2-类可以直接调用,不需要实例化 ----类.方法 / 实例.方法
3-用 @staticmethod 修饰 只能修饰紧跟的那一个
2-实例方法:
1-有self
2- 实例.方法
7-取随机数
from random import randint
randint(0,2)--取 0 1 2 闭区间
8-时间处理:
1- import time
time.time()---单位是s 秒 从1970算起
9-继承
1-继承关系可以是多个父类
2-重写--在父类跟子类之间的一个多态的体现!
3-在重写情况下,调用父类的方法
super(SouTiger,s1).roar()
super(子类类名,子类的实例名).roar()
4- __name 私有属性
'''
'''
游戏分解:
1- 找出涉及的对象:类
1- 房间
2- 羊
3- 老虎
1- 俗称:特征--专业术语--属性;本质:变量
1- 胖瘦--*体重---实例属性
2- 外貌
3- 叫声--*
4- 大小
5- 年龄
6- 统称
2- 俗语:行为---专业术语:方法;本质是--函数
1- 吃---*实例属性
2- 跑
3- 睡
4- 叫--*实例属性
2- 组织关系
'''
'''
1- 属性:
1- 静态属性--整个类的实例共有的
1- 调用:
实例.属性
类.属性
2- 实例属性:每一个实例都可以不一样---体重/名字
1- 使用__init__(self)--初始化方法--构造方法
2- 调用:
1- 实例.属性
2- 类.属性---不能
2- 方法:
'''
class Tiger:
className = '老虎'#属性---本质就是变量属于---类---静态(类)属性--这个类的实例共有
__height = 120#私有
def __init__(self,inWeight):#初始化方法-只要创建实例就一定会调用 t1---传给self
print('我被执行了',inWeight)
self.weight = inWeight
#实例方法--告诉体重
def tell_weight(self):
print('我的体重是{}'.format(self.weight))
#叫---形参带self---实例方法
def roar(self):
print('wow!---体重减5斤')
self.weight -= 5
#喂食
def feed(self,food):
if food == '肉':
self.weight += 10
print('喂食正确,体重增加10斤')
else:
self.weight -= 10
print('喂食错误,体重减少10斤')
#静态方法---共有---没有self
@staticmethod#只能保紧跟着的一个
def static_roar():
print('父类的静态方法---wow!')
class Sheep:
pass
class Room:
def __init__(self,inNum,inAnimal):
self.num = inNum
self.animal = inAnimal
#创建实例---t1--
# t1 = Tiger(100)
#继承----功能扩展----减少代码的重编码--减少重复
class SouTiger(Tiger):
def __init__(self,inweight,inAge):
Tiger.__init__(self,inweight)
self.age = inAge
@staticmethod#只能保紧跟着的一个
def static_roar():
print('子类的静态方法---wow!')
s1 = SouTiger(150,20)
print(s1.weight)
s1.static_roar()#直接调用是子类的
super(SouTiger,s1).static_roar()#调用父类的方法 super(子类的类名,子类的实例名).方法
Tiger.static_roar()
# print(s1.className)
# print(s1.age)
# print(s1.__height)
# # t1.roar()
# # t1.feed('草')
# # t1.tell_weight()
# #
# # Tiger.static_roar()
# # t1.static_roar()
#
#
# r1 = Room(1,t1)
#
# r1.animal.roar()
#
# #随机数处理
# from random import randint
# print(randint(0,2))#左右都包含
#
#
# roomList = []#10个房间实例
# for num in range(1,11):
# if randint(0,1) == 0:
# ani = Tiger()
# else:
# ani = Sheep()
# room = Room(num,ani)
# roomList.append(room)
#
# namelist = ['tom','jack']
# print(namelist[randint(0,len(namelist)-1)])
#
#
# import time
# # print(time.time())#单位是s 从1970---至今
#
#
# startTime = time.time()
# while True:
# curTime = time.time()
# if curTime - startTime > 120:
# break
# t2 = Tiger()
#
# t2.tell_weight()
# print(Tiger.weight)#不能操作
# print(t1.className)
# t2 = Tiger()
# print(t2.className)
# print(Tiger.className)
扩展知识点—多继承
# 多继承--方法重写--
class SouTiger(Tiger,Sheep):#华南虎---继承特点:便于扩展--提高效率--减少编码量
# def __init__(self):
# Tiger.__init__(self,inWeight=200)
@staticmethod
def static_roar():
print('子类的----叫方法')
def feed(self,food):
print('子类的实例方法-----')
#1- 调用指定父类静态方法
#父类类名.方法(子类的实例名)
Tiger.static_roar()
#2- 调用指定父类实例方法--Sheep
super(Tiger,s1).feed('')
resList = []#存储结果 [[类型1,大小1],[类型2,大小2],[类型3,大小3]]
resDict = {}#{'类型1':大小,'类型2':大小}
lines = log.split('\n')
del lines[0],lines[-1]
for line in lines:
infoList = line.split('\t')#list
fileType = infoList[0].split('.')[1].strip()
fileSize = int(infoList[1].strip())#转换类型
#2- 同类型统计---最简单方法----字典做!
if fileType not in resDict:#如果没改类型--新增
resDict[fileType] = fileSize
else:#累加
resDict[fileType] += fileSize
inFlag = False#默认不存在---需要进过遍历去核实该类型存不存在
#先查找--匹配看有没有该类型
for one in resList:#list
if fileType == one[0]:
one[1] += fileSize #累加大小
inFlag = True#表示状态--有---print('该类型存在')
break#匹配完成,后续不需要匹配
if inFlag == False:
resList.append([fileType,fileSize])
print(resDict)
print(resList)