zoukankan      html  css  js  c++  java
  • python面向对象

    1、类和对象

    1.1类

       类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用

                特征被称为属性

               行为被称为方法

    1.2对象

        对象是由类创建出来的一个具体存在,可以直接使用,由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法

    2、类和对象的关系

      先有类后有对象,类只有一个,而对象可以有很多个,不同的对象之间属性可能会各不相同。类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多或少

    3、类的设计

      在使用面向对象开发前,应该首先分析需求,确定程序中需包括哪些类,通常包括三个要素:

             类名:每个单词首字母大写,单词与单词之间没有下划线

            属性:这类事物具有什么样特征

            方法:这类事物具有什么样的行为

    面向对象基础语法

     01dir内置函数(知道)

         在python中对象几乎是无所不在的,在我们之前学的变量、数据、函数都是对象。在python中可以使用以下两个方法验证:

          1、在标识符/数据后属入一个点.然后按下TAB键,ipython会提示该对象能够调用的方法列表

          2、在内置函数dir传入标识符/数据,可以查看对象内所有的属性和方法。提示--方法名--格式的方法是python提供的内置方法/属性

    02定义简单的类

         面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了!

    2.1定义只包含方法的类

        class 类名:

                def  方法1(self,参数列表):

                       pass

               def  方法2(self,参数列表):             

                       pass

    2.2创建对象

    当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:

        对象变量=类名()

    2.3第一个面向对象程序

       需求:小猫爱吃鱼,小猫要喝水

    class  Cat:
    
          def eat(self):
    #哪一个对象调用的方法,self就是哪一个对象的引用 print("%s 爱吃鱼" %self.name)
    print("小猫爱吃鱼") def drink(self) print("小猫要喝水") #创建猫对象 tom=Cat() tom.eat() tom.drink()
    print(tom)
    #再创建一个猫对象
    lazy_cat=Cat()
    lazy_cat.eat()
    lazy_cat.drink()
    print(lazy_cat)

    引用概念的强调

      在面向对象开发中,引用的概念是同样适用的!

    在python中使用类创建对象后,tom变量中仍然记录的是对象在内存中的地址,也就是tom变量引用了新建的猫对象。使用print输出对象变量,默认情况下,是能够输出这个变量引用的对象是由哪个类创建的对象,以及在内存中的地址(十六进制表示)

       提示:在计算机中,通常使用十六进制表示内存地址

           %d可以以10进制输出数字

           %x可以以16进制输出数字

    03方法中的self参数

        3.1案例改造---给对象增加属性

           在python中,要给对象设置属性,非常容易,但不推荐使用

                  因为:对象属性的封装应该封装在类的内部

           只需要在类的外部的代码中直接通过点.设置一个属性即可

        tom.name="Tom"

       lazy_cat.name="大懒猫"

    3.2使用self在方法内部输出每一只猫的名字

       由哪一个对象调用的方法,方法内的self就是哪一个对象的引用

       在类封装的方法内部,self就表示当前调用方法的对象自己

      调用方法时,程序员不需要传递self参数

      在方法内部

             可以通过self.访问对象的属性

            也可以通过self.调用其他的对象方法

     04初始化方法

     4.1之前代码存在的问题---在类的外部给对象增加属性

       提示:在日常开发中,不推荐在类的外部给对象增加属性,如果在运行时,没有找到属性,程序会报错。对象应该包含哪些属性,应该封装在类的内部

    4.2初始化方法

       当使用类名()创建对象时,会自动执行以下操作:

       1、为对象在内存中分配空间--创建对象

       2、为对象的属性设置初始值--初始化方法(init)

    这个初始化方法就是--init--方法,--init--是对象的内置方法

    --init--方法时专门用来定义一个类具有哪些属性的方法!在Cat中增加--init--方法,验证该方法在创建对象时会被自动调用

    class Cat:

    """这是一个猫类"""

          def --init--(self):

                  print("初始化方法")

    #使用类名()创建对象的时候,会自动调用初始化方法--init--

    tom = Cat()

    4.3在初始化方法内部定义属性

         在--init--方法内部使用self.属性名=属性的初始值就可以定义属性

         在定义属性之后,再使用Cat类创建的对象,都会拥有该属性

    class Cat:

          def --init--(self):

                  print("这是一个初始化方法")

                  #定义用Cat类创建的猫对象都有一个name的属性

                  self.name="Tom"

         def eat(self):

              print("%s" 爱吃鱼" % self.name)

    #使用类名()创建对象的时候,会自动调用初始化方法--init--

    tom=Cat()

    tom.eat()

    print(tom.name)

    4.4改造初始化方法--初始化的同时设置初始值

        在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对--init--方法进行改造

          1、把希望设置的属性值,定义成--init--方法的参数

          2、在方法内部使用self.属性=形参接收外部传递的参数

          3、在创建对象时,使用类名(属性1,属性2....)调用

    class Cat:
          def _init_(self,name)
                print("初始化方法 %s" %name)
                self.name=name
    
    tom = Cat("Tom")
    lazy_cat =Cat("大懒猫")

    05内置方法和属性

    _del_ 方法   :对象被从内存中销毁前,会被自动调用

    _str_方法: 返回对象的描述信息,print函数输出使用

    5.1_del_方法(知道)

        在python中,当使用类名()创建对象时,为对象分配完空间后,自动调用_init_方法

       当一个对象被从内存中销毁前,会自动调用_del_方法.如果希望在对象被销毁前,再做一些事情,可以考虑一下_del_方法

    生命周期

        一个对象从调用类名()创建,生命周期开始

      一个对象的_del_方法一旦被调用,生命周期结束

      在对象的生命周期内,可以访问对象属性,或者让对象调用方法

     5.2

     

     

  • 相关阅读:
    POJ 1611
    [Erlang24]使用zotonic搭建网站记录
    [Erlang23]怎么有效的遍历ETS表?
    [Erlang22]如何按规则位数输出数字
    [Git00] Pro Git 一二章读书笔记
    十分钟用HTML&CSS让博客园变得高大上
    [Erlang21]Erlang性能分析工具eprof fporf的应用
    [Erlang20]一起攻克Binary
    [Erlang19]Erlang的config文件读取效率问题
    [Erlang18]教练!又发现Erlang Shell里面的神奇函数一只
  • 原文地址:https://www.cnblogs.com/lcy1995/p/11967922.html
Copyright © 2011-2022 走看看