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

    一、面向过程简介

      

      

       

     二、面向对象的两个核心概念——类和对象

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

        特征被称为属性

        行为被称为方法

      类就相当于一个制造飞机时的图纸,是一个模板,是负责创建对象的

      对象:是由类创建出来的一个具体存在,可以直接使用

      由哪一个类创建出来的对象,就拥有在哪一个类中定义的:属性和方法

      对象 就相当于用图纸制造的飞机

      在程序开发中,应该先有类,再有对象

      类和对象的关系:

        类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象

        类只有一个,而对象可以有很多个

          不同对象之间属性可能会各不相同

        类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少

    三、类的设计

      通常要满足三要素:

      1、类名,满足大驼峰命名法

      2、属性,这类事物具有什么特征

      3、方法,这类事物具有什么行为

    四、面向对象语法

      1、dir内置函数

        对象几乎是无处不在的,变量、数据、函数等都是对象

        

         

         

        内置方法

         

      2、定义简单的类(只包含方法)

        

         创建对象:对象变量 = 类名()

        可以在类的外部代码中,直接通过.设置一个属性,但是不推荐使用

        

        如果先调用方法,此时并没有设置name属性,程序就会报错。

        对象包含哪些属性还是要封装到类的内部

      3、方法中的self参数

        哪一个对象调用了方法,self就是哪一个对象

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

        在方法内部

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

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

     1 class Cat:
     2     def eat(self):
     3         print("%s爱吃鱼" % self.name)
     4 
     5     def dink(self):
     6         print("%s爱喝水" % self.name)
     7 
     8 
     9 tom = Cat()
    10 tom.name = "Tom"
    11 tom.eat()
    12 tom.dink()
    13 
    14 lazy_cat = Cat()
    15 lazy_cat.name = "大懒猫"
    16 lazy_cat.eat()
    17 lazy_cat.dink()

      4、初始化方法

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

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

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

        这个初始化方法就是__init__方法,__init__是对象内置方法

        __init__是专门用来定义一个类具有哪些属性的方法

    1 class Cat:
    2     def __init__(self):
    3         print("初始化")

    tom = Cat()

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

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

          2.定义属性之后,再使用 类名() 创建的对象,都会拥有该属性

     1 class Cat:
     2     def __init__(self):
     3         print("初始化")
     4         self.name = 'Tom'
     5 
     6     def eat(self):
     7         print("%s爱吃鱼" % self.name)
     8 
     9     def dink(self):
    10         print("%s爱喝水" % self.name)
    11 
    12 
    13 tom = Cat()
    14 #tom.name = "Tom"
    15 tom.eat()
    16 tom.dink()

      

      5、内置方法和属性

        1.__del__:对象被从内存中销毁前,会被自动调用

          如果希望对象销毁前再做一些事情,可以考虑__del__方法

     1 class Cat:
     2     def __init__(self, new_name):
     3         self.name = new_name
     4         print("%s来了" % new_name)
     5 
     6     def __del__(self):
     7         print("%s去了" % self.name)
     8 
     9 
    10 Tom = Cat('Tom')
    11 print("-"*50)

     1 class Cat:
     2     def __init__(self, new_name):
     3         self.name = new_name
     4         print("%s来了" % new_name)
     5 
     6     def __del__(self):
     7         print("%s去了" % self.name)
     8 
     9 
    10 Tom = Cat('Tom')
    11 del Tom
    12 print("-"*50)

        生命周期

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

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

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

        2.__str__:返回对象的描述信息,print函数输出使用

          在python中,使用print输出对象变量,默认情况下,会输出这个变量 引用的对象 是由哪一个类创建的对象,以及在内存中的地址

          

          如果在开发中,希望使用print输出对象变量 时,能够打印自定义的内容,就可以使用__str__这个内置方法了

            __str__必须返回一个字符串:

     1 class Cat:
     2     def __init__(self, new_name):
     3         self.name = new_name
     4         print("%s来了" % new_name)
     5 
     6     def __del__(self):
     7         print("%s去了" % self.name)
     8 
     9     def __str__(self):
    10         return "我是小猫[%s]" % self.name

     
      Tom = Cat('Tom')
      print(Tom)

           

          

        

      

      

    tom = Cat()
  • 相关阅读:
    PAT 甲级 1120 Friend Numbers (20 分)
    AcWing 894. 拆分-Nim游戏
    AcWing 891. Nim游戏
    AcWing 892. 台阶-Nim游戏
    AcWing 893. 集合-Nim游戏
    洛谷P1433 吃奶酪
    洛谷P1118 [USACO06FEB]数字三角形`Backward Digit Su`…
    AcWing 125. 耍杂技的牛
    AcWing 104. 货仓选址 绝对值不等式
    AcWing 913. 排队打水 排序不等式贪心
  • 原文地址:https://www.cnblogs.com/onroad2019/p/12016111.html
Copyright © 2011-2022 走看看