python面向对象(一)

* 什么是面向对象
面向对象是一种编程思维。我们常说python是一种面向对象的编程语言,指的是python有很多可以支持我们实现面向对象编程的语法,例如其中最重要的“类”的概念。与面向对象相对应的是面向过程的编程。面向过程是面向对象的基础,指的是按照事务处理的过程进行编程,把每一步都用编程语言实现,来最终完成一个个的任务,强调的是某个行为/过程。面向对象,则是在这个基础上,不再去细究任务是如何完成的,只是将这个行为/过程与某个行为主体绑定起来,每次需要的时候再去访问这个主体,并让其执行这个行为。这样的好处是方便,比如我们今天要做家务,很容易想到用洗衣机这个对象来完成洗衣服、甩干等行为,把工作的重心放在安排做家务的时间顺序、空间顺序等更加宏观的层面,不需要去探究洗衣机是怎么洗的,毕竟即使洗得不好,我们换一台洗衣机即可。但是我们要记住,没有面向过程的洗衣服程序,我们是没有办法实现面向对象,归根结底,衣服还是要洗的,不会凭空变干净。

  • 类的概念与作用
    上文中,洗衣机属于‘洗衣机类’,世界上全部的洗衣机都属于这个类。类是一类物体的抽象,包含了这一类物体的共有特征。如果把“人”定义为一个类,这个类可以有一些人共有的属性行为,比如都可以吃饭,睡觉,都有腿和胳膊。类的出现,是为了准确地刻画现实世界,以我们更容易理解的方式来处理代码与逻辑,是一种更符合人类思维方式的编程方式。
    但是光说“人”这个类,我们只有抽象的理解,却不能进行具体的处理。要进行这样的操作,就必须将类实例化,也就是创建一个属于这个类的个体(叫作对象或实例)。这个对象,是上文提到的属性的实际拥有者,可以执行具体的行为。至此,我们已经有了面向对象编程的基本条件。我们可以自定义这个对象的特征,比如给这个“人”添加一个行为:跑步,或者添加一个属性:配偶的名字。让我们先用代码实现一下刚才提及的概念。
  • 类的创建和使用
点击查看代码
class Person:
    def __init__(self):
        self.weight = 100
这里我们使用关键字class创建了一个“Person”类,并用魔法方法__init__提供了一个weight属性,默认值为100,也就是说所有通过实例化这个类创建的对象都会有一个默认的体重100。 现在我们通过在类名后面加上小括号实例化这个类,并将这个实例叫做张三。
点击查看代码
zhangsan = Person()
print(type(zhangsan))
结果显示是一个person类,说明我们已经把person实例化成功了。我们现在可以访问张三的属性了:
点击查看代码
print(zhangsan.weight)
zhangsan.weight = 120
print(zhangsan.weight)
我们使用 **实例名.属性** 的方式调用了实例变量,又进行了修改。 这看起来相当简单,但是细心的你可能注意到了,仅仅是上述的例子,我们能做的事情并不多。这是因为我们只定义了属性,没有定义方法。带方法的类定义如下:
点击查看代码
class Person:
    def __init__(self):
        self.weight = 100
    def run(self):
        print('running')
让我们忘了之前的Person类,用新的类来创建实例。张三现在多了一个跑的功能。一旦调用run()方法,就会打印出“running”。
点击查看代码
zhangsan = Person()
zhangsan.run()
方法的定义和函数看起来差不多,只是多了一个没有被用到的self参数,而属性的定义看起来就非常怪异,我们是用了一个名为__init__的方法给weight赋值,并且没有调用就生效了。原因就在于,__init__方法属于“魔法方法”,他被设计为在实例创建时就被自动调用。__init__方法中被提供的参数self,用于指代调用这个方法的实例本身,所以用self.weight的方式在魔法方法“__init__”内部给张三的weight属性赋值,和在类的外面用张三.weight的形式赋值是等价的。至于为什么像run这样的普通方法也需要提供参数self(实际上并不会需要我们提供,python会自动帮我们传入),则是因为python追求一种“显式优于隐式”思想,强调实例变量和实例方法都是与实例(即self)紧紧绑定在一起的,在编程的时候,我们通常不会受到这个self的太多影响,大部分时候可以将其无视(但不可省略)。 至此Person类的基本功能已经实现,但是我们会发现用Person类的实例去描绘现实世界依然很麻烦,因为现实世界很多事物都呈现出强关联性,比如人和其他的动物,他们都有一些共性。当我们定义的张三跑步的同时,我们定义的小狗可能也需要有跑步这个功能。是的,类只是一些属性和行为的汇总,现实世界中诸如跑步等行为可不仅仅是人才有,与我们同为生物的许多动物都有。如果我们每一次都需要重新去定义跑步的功能,就打散了这种联系。想要把他们联系起来,我们需要继承。下一篇,我会写一些关于继承的总结,谢谢~
posted @ 2024-04-02 20:05  小丑与锁鸟  阅读(8)  评论(0编辑  收藏  举报