zoukankan      html  css  js  c++  java
  • python全栈开发day19-面向对象初识

    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)
    View Code

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

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

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

       二:特殊的类属性

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

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

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

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

          类名.__dict__# 类的字典属性

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

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

    3.预习和拓展

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

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

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

  • 相关阅读:
    【ABAP系列】SAP 系统的消息类型分析 MESSAGE TYPE
    【FICO系列】SAP FICO-模块 关于固定资产年结和折旧的问题
    【ABAP系列】SAP ABAP 刷新SCREEN的方法
    【ABAP系列】SAP ABAP 控制ALV单元格编辑后获取新的数值
    【ABAP系列】SAP ABAP系统变量及注释
    【EWM系列】SAP EWM凭证对象表概览
    【EWM系列】SAP EWM中仓库任务WT创建的函数
    教你快速录制gif动图
    阿里巴巴的26款超神Java开源项目!
    HTTP和HTTPS协议,看一篇就够了
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9083116.html
Copyright © 2011-2022 走看看