面向对象编程

  • 通过类获取一个对象的过程 - 实例化

  • 类名()会自动调用类中的__init__方法

  • 类和对象之间的关系?

    • 类 是一个大范围 是一个模子 它约束了事务有哪些属性 但是不能约束具体的值
    • 对象 是一个具体的内容 是模子的产物 它遵循了类的约束 同时给属性赋上具体的值
  • 类有一个空间 存储的是定义在class中的所有名字

  • 每一个对象又拥有自己的空间 通过对象名.__dict__就可以查看这个对象的属性和值

    print(alex.name) # print(alex.dict['name']) 属性的查看

    alex.name = 'alexsb' # 属性的修改

    alex.money = 100 # 属性的增加

    del alex.money # 属性的删除

  • 练习类的创建和实例化

    d = ['k':'v']

    print(d,id(d))

    d['k'] = 'vvvv'

    print(d,id(d))

  • 修改列表\字典中的某个值,或者是对象的某一个属性 都不会影响这个对象\字典\列表所在的内存空间

    实例化所经历的步骤

      1.类名() 之后的第一个事儿:开辟一块儿内存空间
    2.调用__init__把空间的内存地址作为self参数传递到函数内部
    3.所有的这一个对象需要使用的属性都需要和self关联起来
    4.执行完init中的逻辑之后,self变量会自动的被返回到调用处(发生实例化的地方)
  • dog类 实现狗的属性 名字 品种 血量 攻击力 都是可以被通过实例化被定制的

    class Dog():

    def init(self,name,blood,aggr,kind):

    self.dog_name = name

    self.hp = blood

    self.ad = aggr

    self.kind = kind

    小白 = Dog('小白',5000,249,'柴犬')
    print(小白.dog_name)
    print(小白.__dict__)
  • 对象/实例 = 类名() => 实例化的过程

  • 对象的属性/实例变量

  • 类中的方法(函数) 有一个必须传的参数 self 对象

  • hasattr getattr setattr delattr 反射

    • 实例对象
    • 本模块 sys.modules[name]
    • 其他模块

      if hasattr(obj,'name'):

      getattr(obj,'name')
  • 找到tbjx对象 的c类 实例化一个对象

    obj = getattr(tbjx,'C')()

  • 找到tbjx对象 的c类 通过对c类这个对象使用反射取到area

    print(getattr(tbjx.C,'area'))

  • 找到tbjx对象 的c类 实例化一个对象 对对象进行反射取值

    obj = getattr(tbjx,'C')('赵海狗')

    print(obj.name)

    print(getattr(obj,'name'))

  • 一次执行多个函数

    def func1():

    print('in func1')

    func_lst = [f'func{i}' for i in range(1,5)]
    for func in func_lst:
    getattr(sys.modules[__name__],func)()
  • 反射应用

    class User:

    user_list = [('login','登录'),('register','注册'),('save','存储')]

        def login(self):
    print('欢迎来到登录页面') def register(self):
    print('欢迎来到注册页面') def save(self):
    print('欢迎来到存储页面') # choose_dic = {
    # 1: User.login,
    # 2: User.register,
    # 3: User.save,
    # } while 1:
    choose = input('请输入序号:\n1:登录\n2:注册\n3:存储\n').strip()
    obj = User()
    # choose_dic[int(choose)](obj)
    getattr(obj,obj.user_list[int(choose)-1][0])()
    # getattr(obj,obj.user_list[int(1)-1][0])()

Python学习之路——类-面向对象编程的更多相关文章

  1. Python学习-第三天-面向对象编程基础

    Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...

  2. python学习笔记15(面向对象编程)

    虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程. 一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界 ...

  3. Python学习之路9☞面向对象的程序设计

    一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...

  4. Python学习札记(三十) 面向对象编程 Object Oriented Program 1

    参考:OOP NOTE 1.面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. ...

  5. Python学习之路10☞面向对象进阶

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(objec ...

  6. python学习之路-8 面向对象之进阶

    上篇内容回顾和补充 面向对象三大特性 封装 继承 多态 在python中没有多态的概念 变量的类型允许为多种数据类型称之为多态 # c#/java中的多态 # 伪代码 def func(int arg ...

  7. Python学习之路——类

    类: 类是将抽象的实物进行的划分. 在现实世界中如果我们将: 人类包含:男人.女人.孩子.老人等动物类包含:小猫.小狗.小兔子等 在代码世界中我也可以分类,例如将相同功能的代码放到一起,这就是分类. ...

  8. Python学习札记(三十三) 面向对象编程 Object Oriented Program 4

    参考:继承和多态 NOTE 著名的开闭原则: 对扩展开放:允许新增Animal子类: 对修改封闭:不需要修改依赖Animal类型的Animal_func()等函数. 1.eg. #!/usr/bin/ ...

  9. Python学习之路15☞socket编程

    一 客户端/服务器架构 即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二 os ...

随机推荐

  1. 前端工程化 Webpack基础

    前端工程化 模块化 (js模块化,css模块化,其他资源模块化) 组件化 (复用现有的UI结构.样式.行为) 规范化 (目录结构的划分.编码规范化.接口规范化.文档规范化.Git分支管理) 自动化 ( ...

  2. RabbitMQ 的集群?

    镜像集群模式 你创建的 queue,无论元数据还是 queue 里的消息都会存在于多个实例上,然后每次你写消息到 queue 的时候,都会自动把消息到多个实例的 queue 里进行消息同步. 好处在于 ...

  3. kafka 为什么那么快?

    Cache Filesystem Cache PageCache缓存 顺序写 由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快. Zero-copy 零拷⻉技术减少拷贝 ...

  4. 如何监控 Elasticsearch 集群状态?

    Marvel 让你可以很简单的通过 Kibana 监控 Elasticsearch.你可以实时查看你 的集群健康状态和性能,也可以分析过去的集群.索引和节点指标.

  5. DRF 简单使用(详细注释版)

    1.djangorestframework使用 下载安装 pip install djangorestframework ## djangorestframework pip install djan ...

  6. 6. Git管理远程仓库

    6. Git管理远程仓库 使用远程仓库的目的 作用:备份,实现代码共享集中化管理 Git克隆操作 目的 将远程仓库(github对应的项目)复制到本地 代码 git clone 仓库地址 多学一招:仓 ...

  7. CCF201604-2俄罗斯方块

    问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏. 游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块.每一轮,都会有一个新的由4个小方 ...

  8. react在移动端的自适应布局

    react+flexible适配布局 (1)npm i lib-flexible --save (2)npm i postcss-px2rem --save (3)在 node_modules/rea ...

  9. 浅谈js本地图片预览

    最近在工作中遇到一个问题,就是实现一个反馈页面,这个反馈页面的元素有反馈主题.反馈类型.反馈内容.反馈人联系电话以及反馈图片.前端将这些反馈的元素POST给后台提供的接口:实现这个工作的步骤就是:页面 ...

  10. EMS查看单个邮箱的已用空间

    Exchange查询单个邮箱用户使用状态. 查看用户"wsj"的邮箱使用状态 键入以下命令: Get-MailboxStatistics wsj | FL DiplayName,T ...