1.昨日内容回顾

  模块:

           1.什么是模块,什么是包

    py文件就是模块,包是包含一系列py文件(__init__.py)的文件夹。

   2.模块的导入相当于相当于执行了导入的模块,首次导入模块,会生成pyc编译文件,模块源文件变动pyc编译文件均能感知到;

             编译文件能加快文件的加载效率,不能加快代码的执行效率。

           3、sys.path 默认会添加一个当前执行文件所在的目录

           4、模块不会重复导入,不能循环引用。

           5、导入模块的方法:

      #from 。。。import

                     #import

                 只有import后面的名字会出现在全局命名空间中。

           6.模块的属性__name__,

      #直接执行一个文件时,这个文件的变量名__name__,都是字符串‘__main__’

      #引用一个模块,这个模块的__name__值为模块名

   7.导入模块的顺序

    # 先写内置模块# 扩展模块# 自定义模块

    从包中导入模块:

    import 精准导入到模块

    from  import至少导入到模块

#导入包相当于执行这个包下的__init__.py文件。

如果导入包后使用里边的模块的内退,那就要在__init__.py文件做以下操作

绝对导入:如果导入的包和执行文件的相对位置改变了,绝对导入路径会失败。

相对导入:用到了相对导入的文件,不能直接执行,如果你写一个文件不是为了自己执行,而是为了别人调用他可以使用相对导入。

单独导包

 

2.面向对象初识

   面向对象的思路:不着急直接去计算/操作代码获取结果,从一个大的问题中要到要描述的角色,将角色的属性和行为抽象出来形成一个模子,后期用到角色的时候都围绕这个模子来操作。

    

  类 :一类抽象的事务,是描述了一类事务有哪些属性或者行为,但是不具体。

  实例\对象:就是一个依托于类的规范存在,被赋予了具体属性值的实际存在的物体。

  实例化:有一个类产生一个对象或实例的过程。

    

  类名的使用:

       1.创建一个对象

       2.访问类定义中的静态变量和动态方法。

3.修改一个静态变量

  对象名的使用:自己有的时候用自己的,自己没有的时候用类中的。

        1.访问对象的属性

         2.调用方法

  静态变量的解释:

    为什么要引入静态变量:首先静态变量之所以出现,所有对象都共享的值就可以设置为静态变量。

    对静态变量修改的两点注意: 

1.最好用类名去修改,这样是最准确的。

2.对象对一个静态变量的重新赋值的过程,实际上可能是在对象的空间中添加一个同名属性而已

    

  对象对类中定义方法的引用的机制:

方法并没有真正存储在对象空间中,之所以对象能找到类中的方法,是因为每一个对象在创建之初都有一个执行类的指针。

      

默写‘人和狗大战’  :

#   创建人这个类
class Person:
def __init__(self, name, sex, hp, ad):
self.name = name
self.sex = sex
self.hp = hp
self.ad = ad def attack(self, dog):
print('%s攻击了%s' % (self.name, dog.name))
dog.hp -= self.ad
if dog.hp > 0:
print('%s损失了%d的血,还剩余%d' % (dog.name, self.ad, dog.hp))
else:
dog.hp = 0
print('%s已经挂了,血量为0!!!' % dog.name) # 创建狗类
class Dog:
def __init__(self, name, kind, hp, ad):
self.name = name
self.kind = kind
self.hp = hp
self.ad = ad def bite(self, person):
print('%s咬了%s' % (self.name, person.name))
person.hp -= self.ad
if person.hp > 0:
print('%s损失了%d的血,还剩余%d' % (person.name, self.ad, person.hp))
else:
person.hp = 0
print('%s已经挂了,血量为0!!!' % person.name) alex = Person('alex', '男', 100, 20)
taidi = Dog('taidi', '中华牧羊犬', 50, 10) alex.attack(taidi)
taidi.bite(alex)

查看类的属性的两种方法:

    1)、dir(类名),返回的是一个名字的列表

2)、类名.__dict__,返回的是一个字典,key为属性名,value为属性值。

   二:特殊的类属性

      类名.__name__# 类的名字(字符串)

      类名.__doc__# 类的文档字符串

      类名.__base__# 类的第一个父类(在讲继承时会讲)

      类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)

      类名.__dict__# 类的字典属性

      类名.__module__# 类定义所在的模块

      类名.__class__# 实例对应的类(仅新式类中)

3.预习和拓展

  1.绑定到对象的方法的特殊之处:

    绑定给谁就由谁来调用,谁来调用,谁就将自己本身作为第一个参数传给方法,本身的值自动传给方法,即自动传值(方法__init__也是同样的道理)

    绑定对象的方法这种自动传值的特性,决定了在类中定义的函数都要默认写一个self参数,self参数可以是任意名字,但约定俗成是self。

python全栈开发day19-面向对象初识的更多相关文章

  1. python全栈开发day21面向对象初识总结

  2. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  3. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  4. python全栈开发 * 19 面向对象 知识点汇总 * 180701

    19 面向对象初识2 一.类的名称空间1.对象的名称空间对象的名称空间中有类对象指针,对象可以通过"类对象指针"找类中的"静态变量"(静态字段),也可以用对象找 ...

  5. python全栈开发 * 18 面向对象知识点汇总 * 180530

    18 面向对象初识1class person: level="高级动物" mind="有思想" def __init__(self,name,age,gent, ...

  6. Python 全栈开发七 面向对象

    一.编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式 ...

  7. python 全栈开发,Day17(初识面向对象)

    一.引子 第一次参加工作,进入了一家游戏公司,公司需要开发一款游戏<人狗大战>一款游戏,首先得把角色和属性定下来. 角色有2个,分别是人和狗属性如下:人 :昵称.性别.血.攻击力狗 :名字 ...

  8. python全栈开发 * 23 面向对象 知识点汇总 * 180704

    23 面向对象 -----特殊方法 1. isinstance(obj,类名) 判断对象是否是此类实例化或者此类的子类实例化出来的class A:passclass B(A):passb1=B()pr ...

  9. python全栈开发 * 22 面向对象 知识点汇总 * 180703

    22 面向对象 -----属性,类方法,静态方法,反射一.属性1.属性的定义:将方法伪装成属性,虽然在代码层面上没有任何高深之处,但让其看起来更合理. (类似于属性的方法)class Person: ...

  10. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

随机推荐

  1. 解决iOS10下Meta设置user-scalable=no无效问题

    苹果为了提高Safari中网站的辅助功能,屏蔽了Meta下的user-scalable=no功能 所以在iOS10下面,就算加上user-scalable=no,Safari浏览器也能支持手动缩放 解 ...

  2. xml的解析方式的简介

    xml的解析的简介(写到java代码) *xml是一个标记型文档 *js使用dom解析标记型文档? -根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象 -do ...

  3. Kafka0.10.0安装配置

    1 解压文件 tar -zvxf kafka_2.11-0.10.0.0.tgz 2 修改配置server.properties vim server.properties broker.id=1 z ...

  4. 利用.frm、.ibd恢复数据

    我们知道启用innodb_file_per_table选项后,单个表(InnoDB引擎)的数据和索引放入单独的文件中(.ibd),建表语句保存在.frm文件中本文假设192.168.85.132,33 ...

  5. HTML5中<template>标签的详细介绍

    HTML5中<template>标签的详细介绍(图文) 这篇文章主要介绍了HTML5中的template标签,是HTML5入门中的重要知识,需要的朋友可以参考 一.HTML5 templa ...

  6. cetus系列~ 读写分离具体分析

    一 简介:上一章我们讲了cetus的基本安装,这章继续分析cetus 二 分析 1 基本配置       1 开启主从延迟检测需在后端数据库创建库proxy_heart_beat和表tb_heartb ...

  7. mysql基本命令[转]

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  8. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器

    1. 前言 2. 指令运行与异常处理寄存器 ARM体系结构的寄存器分为两类: (1)系统控制和状态报告寄存器 (2)指令处理寄存器,如累加.异常处理 本部分将主要介绍如上第(2)部分的寄存器,分为AA ...

  9. ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory order

    1.前言 2.基本概念 Observer 可以发起对memory read/write访问的都是observer; Observability 是一种观察能力,通过read可以感知到别的observe ...

  10. ES系列十六、集群配置和维护管理

    一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...