#面向对象的几个方法
#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的更多相关文章

  1. day25 Pyhton学习 MD5加密.日志

    一.MD5加密 MD5是一种不可逆的加密算法. 它是可靠的. 并且安全的. 在python中我们不需要手写这一套算法. 只需要引入一个叫hashlib的模块就能搞定MD5的加密工作 import ha ...

  2. day25 Pyhton学习 约束和异常处理

    一.类的约束 约束是对类的约束 有两种方法: 1.提取一个父类,在父类中给出一个方法,并且在方法中不给出任何代码,直接抛异常 class Base: def login(self): raise Ex ...

  3. Pyhton学习——Day26

    #多态:多态指的是一类事物有多种形态# import abc# class Animal(metaclass = abc.ABCMeta):# 同一类事物:动物# @abc.abstractclass ...

  4. pyhton 学习

    官方学习文档 https://docs.python.org/3/tutorial/

  5. 20190320_head first pyhton学习笔记之构建发布

    1.把代码nester.py放入文件夹nester中,在文件夹中再新建一个setup.py文件,文件内容如下: from distutils.core import setup setup( name ...

  6. Pyhton学习——Day2

    Python开发IDE(工具)Pycharm.eclipse1.循环while 条件 #循环体 #条件为真则执行 #条件为假则执行break用于退出所有循环continue用于退出当前循环 2.Pyc ...

  7. Pyhton学习——Day28

    #上下文协议:文件操作时使用with执行# with open('a.txt','w',encoding='utf-8') as f1:# with语句,为了让一个对象兼容with语句,必须在这个对象 ...

  8. Pyhton学习——Day27

    # hasattr(obj,'name')-->obj.name# getattr(obj,'name',default = 'xxx')--->obj.name# setattr(obj ...

  9. Pyhton学习——Day24

    # #面向对象设计:# def dog(name,gender,type):# def jiao(dog):# print('One Dog[%s],wfwfwf'%dog['name'])# def ...

随机推荐

  1. node——获取路由中的参数

    var express=require('express'); var app=express(); app.get('/',function(req,res){ res.send('Index'); ...

  2. PHP如何判断一个数组是一维的还是二维的

    1.首先我们有一个PHP内置函数 count(); count(array,mode); array是数组,mode默认为0,1是递归的计数 <?php if(count($arr) == co ...

  3. ASCII 码对照表

    ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 @ 96 . 1 SOH 33 ! 65 A 97 a 2 ST ...

  4. -1 深度学习基础caffe

    一.反思 二.反向传播 三.ubuntu安装caffe 四.追踪关键词

  5. Flask-SQLAlchemy中解决数据库连接1366报错

    报错信息:Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'V ...

  6. 3.1、Jinja2模板引擎

    形式最简单的 Jinja2 模板就是一个包含响应文本的文件.示例 3-1 是一个 Jinja2 模板,它和示例 2-1 中 index() 视图函数的响应一样. 示例 3-1 templates/in ...

  7. win10 1809磁盘占用总是100%

    快过年了,提前请假回家,装几台电脑公司备用.有个电脑装完系统开机很慢,开机完成之后电脑响应也很慢,于是打开任务管理器发现磁盘中用率一直是100%,然而程序读取数据的速度并不高. 解决思路: 关闭win ...

  8. linux vim 编辑文件时无法保存

    操作ESC + : wq   无反应 那么我们操作SHFT按键,在操作Z按键,连续按两下Z按键即可(保存当前内容且退出)

  9. 菜鸟学习ios

    object-c中@interface和@property声明变量的区别   Objective-C语言关键词,与@synthesize配对使用.xcode4.5以及以后的版本,@synthesize ...

  10. Mark一下:成为CSDN博客专家

    距第一篇博客(发表于2015.08.13)已有差不多7个月,还记得当时受一个基友的启发,觉得要总结写作些什么,于是磕磕碰碰写出第一篇博客,坚持写作至今,穿梭于CSDN.简书.知乎和作业部落等门户网站, ...