Python之路:面向对象(基础)

Posted __Miracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路:面向对象(基础)相关的知识,希望对你有一定的参考价值。

python基础之面向对象(基础篇)

 

概述

  • 面向过程:根据业务逻辑从上到下写垒代码
  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”                                         

   在之前已经接触过了面向过程和函数式的编程,还有那么今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)

创建类和对象

面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

  类就是一个模板,模板里可以包含多个函数,函数里实现一些功能(把一类事物的相同特征和动作整合到一起就是类)

  对象则是根据模板创建的实例,通过实例对象可以执行类中的函数(就是基于类而创建的一个具体的事物(具体存在的))

 

在这里举一个小例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建类
class Foo:
      
    def Bar(self):
        print \'Bar\'
  
    def Hello(self, name):
        print \'i am %s\' %name
  
# 根据类Foo创建对象obj
obj = Foo()
obj.Bar()            #执行Bar方法
obj.Hello(\'wupeiqi\'#执行Hello方法 

  面向对象:【创建对象】【通过对象执行方法】

  函数编程:【执行函数】

应用的场景不同造成的编程方式也不同,总结:函数式的应用场景 --> 各个函数之间是独立且无共用的数据

这里再对面向对象再进行一下细分:


  1、面向对象不是所有情况都适用

  2、面向对象编程

    a 定义类

      class Foo:

        def 方法1(self,bb):

          pass

      obj = Foo(bb)

    b 根据类创建对象(创建一个Foo类的实例)

     可以使用对象去执行类中的方法

  3、self,形式参数,代指执行方法的对象。python内部自动传递

  4、类+括号 => 自动执行类中的 __init__方法: 创建了一个对象

    在__init__ 有一个特殊名字:构造方法

    ==》 初始化

    __del__ 解释器销毁对象时候自动调用,特殊的名: 析构方法

静态属性,静态方法,类方法,组合

  静态属性的作用 将函数属性伪装成数据属性(封装逻辑)

  用法 在方法(函数属性)上面加 @property

复制代码
 1 class Desk:
 2     def __init__(self,name,width,length,heigh):
 3         self.name = name
 4         self.width = width
 5         self.length = length
 6         self.heigh = heigh
 7     @property # 静态   将函数属性伪装成数据属性
 8     def cal_area(self):
 9         x = "立方厘米"
10         return self.length*self.width*self.heigh,x
11 
12 d1 = Desk("舒克",20,50,10)
13 print(d1.cal_area)
14 
15 (10000, \'立方厘米\')
复制代码

  静态方法 跟类和实例无关系,名义上归属类管理,但不能使用类变量和实例变量

  用法 在方法(函数属性)上面加 @staticmethod 

  特点: 只能使用静态变量, 所以始终占用同一个内存, 执行效率更高, 但不会被自动回收. 

复制代码
 1 class Desk:
 2     def __init__(self,name,width,length,heigh):
 3         self.name = name
 4         self.width = width
 5         self.length = length
 6         self.heigh = heigh
 7     @staticmethod # 用函数修饰符来声明静态方法
 8     def cal_area():
 9         print("我跟类和实例没有任何关系哦!")
10 
11 
12 
13 # 静态方法不能调用类和实例的属性
复制代码

  类方法 不需要self参数,自动加cls参数,python底层自动传入类对象。

  跟实例没有关系,类自己调用;只能访问类的属性,不能访问实例属性

  用法 在方法(函数属性)上面加 @classmethod