Pyhton学习——Day25
#面向对象的几个方法
#1.静态方法@staticmethod,不能访问类属性,也不能访问实例属性,只是类的工具包
#2.类方法:@classmethod,在函数属性前加上类方法,显示为(cls)代表类,类能访问到数据属性和函数属性,不能访问至实例属性
#3.静态属性:@property,把函数封装成一个数据属性的形式,让外部调用时看不到内部的逻辑;特点:定义时有self(实例本身)
#################################################################################################################
#组合(拼接):定义一个人的类,比如手、头、脚,这个属性又可以是通过一个实例化的对象,这就是组合
#用途:1.做关联、2.小的组成大的
# class Head:
# pass
# class Foot:
# pass
# class Trunk:
# pass
# class Hand:
# pass
# class Person:
# def __init__(self,id_num,head,foot,trunk,hand):
# self.id_num = id_num
# self.head = head()
# self.foot = foot()
# self.trunk = trunk()
# self.hand = hand()
# P1 = Person.__dict__
# print(P1)
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日学习打卡/Day25.py
# {'__module__': '__main__', '__init__': <function Person.__init__ at 0x000000000297A6A8>,
# '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__':
# <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
#
# Process finished with exit code 0
#################################################################################################################
# class School:
# def __init__(self,name,addr):
# self.name = name
# self.addr = addr
#
# class Course:
# def __init__(self,name,price,period,school):
# self.name = name
# self.price = price
# self.period = period
# self.school = school
# def employ(self):
# print('%s 正在empoying'%self.name)
# s1 = School('oldboy','beijing')
# s2 = School('oldboy','nanjing')
# s3 = School('oldboy','dongjing')
# c1 = Course('linux',10,'1h',s1)
# c2 = Course('Python',100,'100h',s2)
# msg = '''
# 1 oldboy beijing
# 2 oldboy nanjing
# 3 oldboy dongjing
# '''
# while True:
# print(msg)
# menu = {
# '1':s1,
# '2':s2,
# '3':s3
# }
# choice = input('选择学校>>>')
# school_obj = menu[choice]
# # choice2 = input('选择课程>>>')
# name = input('课程名>>: ')
# price = input('课程费用>>: ')
# period = input('课程周期>>: ')
# new_course = Course(name, price, period, school_obj)
# print('课程【%s】属于【%s】学校' % (new_course.name, new_course.school.name))
# 模拟选课##############################################################################################
#################################################################################################################
#################################################################################################################
# 面向对象的三大特性
# 1.继承 2.多态 3.封装
# 一、什么是类的继承?
# 类的继承跟现实中的父子、孙子、重孙子、继承关系一样,父类又称为基类
# python中的类的继承分为:单继承和多继承
# class ParentClass1:
# pass
# class ParentClass2:
# pass
# class SubClass(ParentClass1): #单继承
# pass
# class SubClass(ParentClass1,ParentClass2): #多继承
# pass
# 二、子类到底继承了父类的什么属性
# 子类调用方法会触发父类的init方法,子类继承了父类的所有属性,但是子类的方法还是先调用自己的方法,找不到自己的方法才会去
# 父类去找方法或属性
# class robot:
# power = 100
# def __init__(self,name,energy):
# self.name = name
# self.energy = energy
# def act(self):
# print('%s机器人正在消耗能源'%self.name)
# class robot_arm(robot):
# def __init__(self,type):
# self.type = type
# def act1(self):
# print('%s型号机器人正在动arm'%self.type)
# r = robot('pandaboy','氢气能源')
# r1 = robot_arm('ASII')
# r1.act1()
# print(r1.power)
#################################################################################################################
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日学习打卡/Day25.py
# ASII型号机器人正在动arm
# 100
#
# Process finished with exit code 0
#################################################################################################################
#################################################################################################################
# 什么时候用继承?
# 1.当类之间有显著不同,并且较小的类是较大的类所需要的组件,用组合比较好
# 例如:描述一个机器人类,机器人这个大类是由很多互不相关的小类组成的,如机器手臂类、身体类、电池类等
# 2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好
#################################################################################################################
# 什么是派生?
# 当然子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是,
# 一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了。
#################################################################################################################
# 继承同时具有两种含义
# 含义一:继承基类的方法,并且自己的改变或者扩展(代码重用)
# 含义二:声明某个子类兼容于某基类,定义一个借口类,子类继承接口类,并且实现接口中定义的方法
# 实践中,继承的第一种含义意义并不是很大,甚至是有害的,因为它使得子类与基类出现强耦合
# 继承的第二种含义非常重要,它又叫"接口继承"
# 接口继承实质上是要求"做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,可以一视同仁
# 的处理实现特定接口的所有对象——这在程序设计上叫做归一化"
# 归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合——就好像linux的泛文件对象概念一样,
# 所有的东西都可以当做文件处理,不必关心它是内存、磁盘、网络还是屏幕(当然,对于底层设计者,也可以区分出"字符设备"和"块设备")
# 然后做出针对性的设计,细致到什么程度,视需求而定
# 一切皆文件是没有意义的,归根结底就是全部都是读和写
#################################################################################################################
# 接口继承代表定义一个基类,类当中把接口的方法定义一个函数,来一个子类就必须实现基类的方法
# 接口就是一个函数
# import abc
# 1.python可以继承多个类,java和c只能继承一个类
# 2.python如果继承了多个类,那么寻找方法的方式有两种,分别是深度优先和广度优先
# 当类是经典类时,多继承情况下,会按照深度优先方式查找
# 当类时新式类时,多继承情况下,会按照广度优先方式查找
#————————————————————————————————————————————————————————
# 继承顺序
# class A:
# pass
# class B(A):
# pass
# class C(A):
# pass
# 在子类中继承父类
# super().__init__()
# 运行super调用super下的方法
Pyhton学习——Day25的更多相关文章
- day25 Pyhton学习 MD5加密.日志
一.MD5加密 MD5是一种不可逆的加密算法. 它是可靠的. 并且安全的. 在python中我们不需要手写这一套算法. 只需要引入一个叫hashlib的模块就能搞定MD5的加密工作 import ha ...
- day25 Pyhton学习 约束和异常处理
一.类的约束 约束是对类的约束 有两种方法: 1.提取一个父类,在父类中给出一个方法,并且在方法中不给出任何代码,直接抛异常 class Base: def login(self): raise Ex ...
- Pyhton学习——Day26
#多态:多态指的是一类事物有多种形态# import abc# class Animal(metaclass = abc.ABCMeta):# 同一类事物:动物# @abc.abstractclass ...
- pyhton 学习
官方学习文档 https://docs.python.org/3/tutorial/
- 20190320_head first pyhton学习笔记之构建发布
1.把代码nester.py放入文件夹nester中,在文件夹中再新建一个setup.py文件,文件内容如下: from distutils.core import setup setup( name ...
- Pyhton学习——Day2
Python开发IDE(工具)Pycharm.eclipse1.循环while 条件 #循环体 #条件为真则执行 #条件为假则执行break用于退出所有循环continue用于退出当前循环 2.Pyc ...
- Pyhton学习——Day28
#上下文协议:文件操作时使用with执行# with open('a.txt','w',encoding='utf-8') as f1:# with语句,为了让一个对象兼容with语句,必须在这个对象 ...
- Pyhton学习——Day27
# hasattr(obj,'name')-->obj.name# getattr(obj,'name',default = 'xxx')--->obj.name# setattr(obj ...
- Pyhton学习——Day24
# #面向对象设计:# def dog(name,gender,type):# def jiao(dog):# print('One Dog[%s],wfwfwf'%dog['name'])# def ...
随机推荐
- 路飞学城Python-Day101
57-多表操作之一对多添加纪录 def add(request): # pub = Publish.objects.create(name='人民出版社', email='873245193@qq.c ...
- 解决vue中模态框内数据和外面的数据绑定的问题
1.做表格的修改,把整条数据传到模态框做修改,但是出现模态框改变数据没有保存时,表格的数据也会跟着改变,我想实现保存以后表格数据才会改变的功能. html:使用item整条数据都上传过去了,在upda ...
- 序列模型(5)-----双向神经网络(BRNN)和深层循环神经网络(Deep RNN)
一.双向循环神经网络BRNN 采用BRNN原因: 双向RNN,即可以从过去的时间点获取记忆,又可以从未来的时间点获取信息.为什么要获取未来的信息呢? 判断下面句子中Teddy是否是人名,如果只从前面两 ...
- BA-Bacnet ip 、TCP/IP
BACENT IP TCP/IP协议
- C#中的全局程序集缓存定义
安装有公共语言运行时的每台计算机都具有称为全局程序集缓存的计算机范围内的代码缓存.全局程序集缓存中存储了专门指定给由计算机中若干应用程序共享的程序集. 应当仅在需要时才将程序集安装到全局程序集缓存中以 ...
- N - 畅通工程再续
N - 畅通工程再续 思路:zz #include<cmath> #include<cstdio> #include<cstring> #include<io ...
- HDOJ 2682 Tree(最小生成树prim算法)
Tree Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Linux 网卡驱动学习(六)(应用层、tcp 层、ip 层、设备层和驱动层作用解析)
本文将介绍网络连接建立的过程.收发包流程,以及当中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 1.应用层 对于使用socket进行网络连接的server端程序.我们会先调用socket函 ...
- iOS-获取Model(设备型号)、Version(设备版本)、app(程序版本)等
IOS-获取Model(设备型号).Version(设备版本).app(程序版本)等 NSLog(@"uniqueIdentifier: %@", [[UIDevice curre ...
- POJ 3905 Perfect Election(2-sat)
POJ 3905 Perfect Election id=3905" target="_blank" style="">题目链接 思路:非常裸的 ...