Python类和对象(封装)

如果说函数的存在意义是为了可以随时随地的重复我们需要的同一操作,那么封装的意义就是为了可以随时随地的创造出同一类的对象,这也就是python面向对象特点的最大体现。

类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。

一、创建类

利用关键字class可以做到对类的创建。

实例如下:

class pet:
    type = 'dog'

这样一个宠物类就创建好了,这个类的名称就叫pet,而type则是这个类的一个属性。但这样创建类其实是不常用的,因为这个type的属性会成为通过这个类所创建出的对象的相同属性,但宠物又不只有dog,如果我们想创建出一个可以由我们自己来输入实例参数type的属性,又该如何设置呢?那么我们需要引入类中的第一个函数方法__init__函数。

1.__init__函数(用于类中属性的赋值)

所有类都有一个名为 __init__() 的函数,它始终在启动类时执行。

使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作。

实例如下:

class pet:
    def __init__(self,type):
        self.type = type

self是__init__函数的第一个参数,也是必不可少的一个参数,该参数的意义是为了区分同一个类中创建出来的不同对象,可以把他当成形参,但这个形参可以不输入实例参数,你的对象名就是这个形参的实例参数。

在为这个函数中创建所有属性时,都应在前加上 self. 以表明这个属性所归属的对象。而在这个类后面的所有的函数创建中,若要调用这个对象的属性,都应该在调用的属性名前加上 self. 以表明调用的是哪个对象的属性。 

注意:这个参数名字在创建类时不一定必须要用self这个名字,你可以改成任意你喜欢的名字,但一般来说,大家会喜欢使用self。

2.其它内置函数

如果说__init__函数是为了为对象添加属性,那么之后添加的内置函数,可以代表这个类的种种行为。

实例如下:

class pet:
    def __init__(self,type,name):
        self.type = type
        self.name = name
    def running(self):
        print(f"{self.name} is runing.")

比如我们在这个类中添加了一个runing的内置函数, 当我们想让用这个类创建出的对象跑动时,我们就可以调用这个函数,来表明这个对象跑动的行为。

注意:其它内置函数中可以添加新的参数,也可以不添加,但self参数依旧是必不可少的,self参数表明这你调用的属性是谁的属性,因此在后面的所有内置函数的设置中,都应该加上self这个参数。

二、创建对象 

类已经创建好了,接下来就是使用类来创建对象。

实例如下:

my_dog = pet(dog,jack)
my.dog.running()

输出如下:

jack is running

你先需要创建一个对象去接收使用这个类创建出的实例,实例参数则在类名后的括号里面输入,而self参数是可以省略的,而如果要使用类中的内置函数,则需要指明这个内置函数所属的对象再进行调用。

三、子类与父类 

类也分小类和大类,比如我们刚刚创建了一个宠物的类别,但如果我们要创建一个黑色的宠物类别,他也是属于宠物这一类的,只不过这个类别中所有对象的毛色都是黑色,那么我们需要引入一个子类和父类的概念。

子类和父类是相对的,子类仅相对于他的父类是子类,而父类也仅相对于他的子类是父类,子类可以继承父类的所有属性与方法,那么我们在创建子类的操作中,涉及到了一个叫做继承的操作。

1.继承

继承是指子类从父类中继承了所有的方法和属性,如果想要一个子类继承父类,则在创建子类时,把父类作为实例参数输入到子类的创建中。

实例如下:

class black_pet(pet):
    pass

这样就完成了black pet子类的创建,它将继承父类pet中的一切属性和函数,如果你不想加入其它的属性与方法,可以使用pass关键字,因为创建一个类却没有进行任何操作是不被允许的,而pass关键字可以避免系统报错。

2.在子类中使用__init__函数

如果在子类中使用__init__函数,因为__init__函数会在创建对象是被立马调用,那么如果在子类中添加了__init__函数,那么父类的__init__函数中设置的属性将在子类中被覆盖,这就意味着子类不再继承父类的属性,但父类中的方法仍旧可以使用。

但有时我们需要父类的属性,但我们也想添加子类相比于父类特有的属性,因此我们可以使用super函数。

3.super函数

super函数可以使子类继承父类的所有属性和方法。

若子类要用super函数来继承父类,则子类的__init__函数的参数需要先将父类的__init__函数的参数完整移植到子类中来,再选择是否添加新的参数,倘若父类的__init__函数中有5个参数,而子类的__init__函数只有父类其中四个,则python会报错。

实例如下:

class black_pet(pet):
    def __init__(self,type,name)
    super().__init__(type,name)
    self.color = 'black'

这样我们不仅让子类继承了父类的属性和方法,同时也增加了子类的特有属性。

注意:在使用super函数时,参数中无需self参数,只有在类中的内置函数的参数才需要self参数,而self函数不属于内置函数。 

猜你喜欢

转载自blog.csdn.net/m0_74043494/article/details/127945486