#面向对象的几个方法
#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. 动态规划——独立任务最优调度(Independent Task Scheduling)

    题目链接 题目描述 用2 台处理机A 和B 处理n 个作业.设第i 个作业交给机器A 处理时需要时间i a ,若由机器B 来处理,则需要时间i b .由于各作业的特点和机器的性能关系,很可能对于某些i ...

  2. python3发送邮件

    import smtplib from email.mime.text import MIMEText from email.utils import formataddr import psutil ...

  3. awk手册

    awk 手册 简体中文版由bones7456 (bones7456@gmail.com)整理. 原文:应该是 http://phi.sinica.edu.tw/aspac/reports/94/940 ...

  4. Project Euler 13 Large sum

    题意:计算出以下一百个50位数的和的前十位数字. /************************************************************************* ...

  5. 《代码敲不队》第八次团队作业:Alpha冲刺 第二天

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 代码敲不队 作业学习目标 掌握软件编码实现的工程要求. 团队项目github仓库地址链接 GitH ...

  6. 00070_Calendar

    1.Calendar类概念 (1)Calendar是日历类,在Date后出现,替换掉了许多Date的方法.该类将所有可能用到的时间信息封装为静态成员变量,方便获取: (2)Calendar为抽象类,由 ...

  7. Zookeeper源代码编译为Eclipseproject(win7下Ant编译)

    为了深入学习ZooKeeper源代码,首先就想到将其导入到Eclispe中,所以要先将其编译为Eclispeproject. 1.什么是Ant??? Apache Ant™ Apache Ant is ...

  8. 数论(同余+hash)

    Time Limit:3000MS Memory Limit:65536KB Description You are given a sequence a[0]a[1] ... a[N-1] of d ...

  9. Deming管理系列(1)——开车仅仅看后视镜

    问题: 当业务经理被要求为未来的业务做计划时,他会提出一个自觉得不错的数字,而董事会往往希望能获得更大的收益,多次与其谈判.而业务经理在这方面不是新手,他有非常多可用的报告. 为什么不能让业务规划流程 ...

  10. 简单的Queue

    不考虑好多东西,算法考试中用得到的Queue #include<iostream> using namespace std; const int MAX = 100; struct MyQ ...