Python面向对象

Python面向对象,第1张

1.面向过程与面向对象

面向过程:面向过程的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。强调解决问题的步骤

面向对象:面向对象:面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

*面向对象与面向过程的优缺点

面向过程

优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码

缺点:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身

面向对象

优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,最终结果无法预测

2.面向对象中的类

类:类是对一系列具有相同特征和行为的事物的统称

1. 类的定义及命名空间

类的定义:

class 类名:      # 类名用大驼峰式命名
    类属性名 = 类属性值
    def __init__(self,参数列表):
        self.实例变量 = 参数
    
    def 实例方法名(self):
        pass

# __init__:初始化方法,创建对象时被调用,根据需求使用
# self:变量绑定的是被创建的对象,名称可以随意, 但约定俗成self

类的命名空间:创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

2. object、新式类与经典类

  1. object类:object是顶级父类, 在python3中所有的类均默认继承object类, 继承了object后的类称为新式类, 所以python3中默认都是新式类
  2. 新式类与经典类:python3中默认全部类都是新式类, python2中有新式类与经典类的区分, python2中继承了object的称为新式类, 未继承object的称为经典类(旧式类),经典类与新式类之间的重要区别就是在继承搜索顺序中算法不同, 经典类采用深度优先算法, 新式类采用广度优先算法
3.面向对象中的对象

实例化过程就是类--->对象的过程   即  对象名 = 类名(参数)

对象调用实例方法:对象名.实例方法名(参数列表)

对象的命名空间:创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

4.面向对象的三大特征

1.继承

继承是类与类之间的关系, 一个继承另一个类时, 这类会同时又有另一个类的属性和方法,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

2.封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式

3.多态

多态指的是一类事物有多种形态,使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果

5.isinstance与issubclass函数

1.isinstance函数

检验obj是不是class实例化得来的对象, 如果是返回True, 否则返回False

语法:isinstance(obj,class)

class A(object):
         pass
    class B():
        pass
    a = A()
    b = B()

    ret = isinstance(a, B)
    rst = isinstance(b, B) 

    print(ret)	 # 结果: False
    print(rst)   # 结果: True

2. issubclass函数

检验class是不是classinfo的子类, 如果是返回True, 否则返回False

语法:issubclass(class, classinfo)

class A(object):
    pass
class B(A):
    pass
class C(): 
    pass

res = issubclass(B,A)
ret = issubclass(C,A)

print(res)	# 结果: True
print(ret)	# 结果: False
    
6.魔法方法

双下滑线开头双下划线结尾,且调用某些方法时自动触发的方法,为魔法方法

1.__str____repr__魔法方法

自定义类的字符串描述,当我们打印或查看某个对象时,最终看到的结果是这两个方法的返回值。这两个方法返回值必须是字符串,否则会报错。

触发时机:给对象定义__ str__ 和 __ repr__ 方法,在交互模式下,直接输入对象再回车,触发了__repr__方法;打印对象触发__str__方法。

2.__new____init__魔法方法

__new__:  负责创建类的实例对象所需要的内存空间
__init__:  负责对__new__创建的对象进行初始化

触发时机:__new__: 实例化时触发 、 __init__: 初始化对象时触发

3.__call____del__魔法方法

​__call__: 将一个类实例当做函数调用
__del__: 删除实例化对象

触发时机:__call__: 将对象当成函数调用、 __del__: 当空间没有调用次数的时候,自动触发执行

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/875045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存