python 类的各类设计、子类扩展、变化及继承,边学边练,边练边记录。

print("=============类的设计=======================")
class Employee:def __init__(self,name,salary=0):self.name = nameself.salary =salarydef giveRaise(self,percent):self.salary = self.salary + (self.salary*percent)def work(self):print(self.name,"does stuff")def __repr__(self):return "<Employee:name=%s,salary=%s>"%(self.name,self.salary)class Chef(Employee):def __init__(self,name):Employee.__init__(self,name,50000)def work(self):print(self.name,"makes food")class Server(Employee):def __init__(self,name):Employee.__init__(self,name,40000)def work(self):print(self.name,"interfaces with customer")class PizzaRobot(Chef):def __init__(self,name):Chef.__init__(self,name)def work(self):print(self.name,"makes pizza")if __name__ == '__main__':bob = PizzaRobot('bob')print(bob)bob.work()bob.giveRaise(0.20)print(bob);print()for klass in Employee,Chef,Server,PizzaRobot:obj = klass(klass.__name__)obj.work()class Customer:def __init__(self,name):self.name=namedef order(self,server):print(self.name,"orders from",server)def pay(self,server):print(self.name,"pays for item to",server)class Oven:def bake(self):print("oven bakes")class PizzaShop:def __init__(self):self.server = Server('Pat')self.chef =PizzaRobot('Bob')self.oven = Oven()def order(self,name):customer = Customer(name)customer.order(self.server)self.chef.work()self.oven.bake()customer.pay(self.server)if __name__ == '__main__':scene = PizzaShop()scene.order('Homer')print('...')scene.order('Shaggy')print("=============重返流处理器=======================")
# def processor(reader,converter,writer):
#     while 1:
#         data = reader.read()
#         if not data: break
#         data = converter(data)
#         writer.write(data)
#
# class Processor:
#     def __init__(self,reader,writer):
#         self.reader = reader
#         self.wrtier = writer
#     def process(self):
#         while 1:
#             data = self.reader.readline()
#             if not data: break
#             data =self.converter(data)
#             self.wrtier.write(data)
#     def converter(self,data):
#         assert False,'converter must be defined'
#
# class Uppercase(Processor):
#     def converter(self,data):
#         return data.upper()
# if __name__ == '__main__':
#     import sys
#     obj = Uppercase(open('spam.txt'),sys.stdout)
#     obj.process()print("============类的高级主题===================")
class Set:def __init__(self,value=[]):self.data = []self.contat(value)def intersect(self,other):res = []for x in other:res.append(x)return Set(res)def union(self,other):res = self.data[:]for x in other:if not  x in res:res.append(x)return Set(res)def contat(self,value):for x in value:if not x in self.data:self.data.append(x)def __len__(self):         return len(self.data)def __getitem__(self, key): return self.data[key]def __and__(self, other):  return self.intersect(other)def __or__(self, other):  return self.union(other)def __repr__(self):    return 'Set:' + repr(self.data)x=Set([1,3,5,7])
print(x.union(Set([1,4,7])))
print(x | Set([1,4,6]))print("============通过子类扩展类型===================")
# class Mylist(list):
#     def __getitem__(self, offset):
#         print('(indexing %s at %s)' % (self,offset))
#         return list.__getitem__(self,offset - 1)
#
#     if __name__ == '__main__':
#         print(list('abc'))
#         x=Mylist('abc')
#         print(x)
#
#         print(x[1])
#         print(x[3])
#
#         x.append('spam');print(x)
#         x.reverse();print(x)print("============新式类变化===================")
"""
1、类和类型合并
类现在就是类型,并且类型现在就是类。实际上,这二者基本上是同义词。type(I)内置函数返回一个实例所创建自的类,而不是一个通用的实例类型,并
且,通常是和I. class相同的。此外,类是type类的实例,type可能子类化为定制类创建,并且所有的类(以及由此所有的类型)继承自object
2、继承搜索顺序
多继承的钻石模式有一种略微不同的搜索顺序,总体而言,它们可能先横向搜索再纵向搜索,并且先宽度优先搜索,再深度优先搜索。
3、针对内置函数的属性获取
getattr_和_getattribute_方法不再针对内置运算的隐式属性获取而运行。这意味着,它们不再针对运算符重载方法名而调用,这样的名称搜索从类开
始,而不是从实例开始。
4、新的高级工具
新式类有一组新的类工具,包括slot、特性、描述符和 getattribute方法。这
些工具中的大多数都有非常特定的工具构建目的。
"""
# class C:pass
# I=C()
# type(I)
# I.__class__
# type([1,2,3])
# type(list)
# list.__class__print("============所有对象派生自object===================")
class C:pass
X=C()
type(X)
type(C)isinstance(X,object)
isinstance(C,object)type('spam')
type(str)isinstance('spam',object)
isinstance(str,object)type(type)
type(object)isinstance(type,object)
isinstance(object,type)print("============钻石继承变动===================")
class A:attr = 1
class B(A):pass
class C(A):attr = 2
class D(B,C):pass
x=D()
print(x.attr)class A(object):attr = 1
class B(A):pass
class C(A):attr = 2
class D(B,C):pass
x=D()
print(x.attr)print("============下阶段学:异常与工具===================")

python 类的各类设计、子类扩展、变化及继承学习笔记相关推荐

  1. Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)

    Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...

  2. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  3. 【Python-pywt】 小波变化库—Pywavelets 学习笔记

    (转载) [Python ]小波变化库--Pywavelets 学习笔记_nanbei2463776506的博客-CSDN博客 https://blog.csdn.net/nanbei24637765 ...

  4. 阿里云天池 Python训练营Task3: Python基础进阶:从函数到高级魔法方法 学习笔记

    本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...

  5. ASP.NET Core分布式项目实战(业务介绍,架构设计,oAuth2,IdentityServer4)--学习笔记...

    任务4:第一章计划与目录 敏捷产品开发流程 原型预览与业务介绍 整体架构设计 API 接口设计 / swagger Identity Server 4 搭建登录 账号 API 实现 配置中心 任务5: ...

  6. python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...

  7. python语言的33个保留字的基本含义_Python学习笔记——Python的33个保留字及其意义,python,pythone33,含义...

    Python学习笔记--Python的33个保留字及其意义,python,pythone33,含义 发表时间:2020-03-27 笔记走起 正文 序号 保留字 含义 1 and 用于表达式运算,逻辑 ...

  8. python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式

    本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...

  9. 《Python语言程序设计》第四章(选择)学习笔记

    <Python语言程序设计>学习笔记 笔记选自<Python语言程序设计>[美]梁勇 著 本篇笔记没有记录用python绘画的turtle库 第4章 选择 可以使用int函数将 ...

最新文章

  1. 基于android的天气预报的设计与实现
  2. IBM会话设置和覆盖规则
  3. 用eclipse生成可运行jar包、启动jar包及常见错误
  4. QML识别模块identifiedmodules
  5. 浅谈ASP.NET Forms验证
  6. ubuntu16.04下安装emacs
  7. 《零基础看得懂的C语言入门教程 》——(十一)C语言自定义函数真的很简单
  8. C++之运算符重载(上)
  9. CoreData 从入门到精通(五)CoreData 和 TableView 结合
  10. java类静态初始化_Java静态代码块和类初始化、实例初始化过程
  11. js 一个关于图片onload加载的事
  12. 【组成原理-处理器】数据通路
  13. 循环结构--while循环
  14. 建站百科|企业网站logo设计指南
  15. OpenGL和DirectX是什么?
  16. (ISC)2官方中国CISSP授权培训服务提供商正式启动
  17. MicroPython_ESP8266_IoT——第四回 初入联网(接入了贝壳物联)
  18. python开发工程师岗位简介_python开发工程师是什么
  19. jdbc驱动安装以及简单测试
  20. Python 爬取王者农药全套皮肤

热门文章

  1. 查看windows用户登录记录
  2. springboot配置swagger
  3. 假设检验、显著性水平、P值、Z值的理解
  4. 计算机毕业设计ssm师生交流平台cb59e系统+程序+源码+lw+远程部署
  5. 打印魔方阵(C语言) 所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。
  6. 项目管理者如何给下属分配任务?
  7. C++ 强制类型转换
  8. robocopy复制详解
  9. Vision Transformer with Deformable Attention可变形注意力
  10. 2016搜索网站七夕Logo大比拼