Python零基础入门教程 14.类与对象

类与对象

大纲

视频地址https://www.bilibili.com/video/av926638403?p=15

前言

面向对象最重要的两个概念就是类(Class)和对象(Object),对象也可以称为实例(Instance)

类相当于一个模板,而实例就是根据这个模板创建出来的,每个实例都有相同的方法(功能),但可能它们的数据不一样

Python零基础入门教程 14.类与对象

有一个歌手类,四大天王是歌手类的实例,虽然他们唱功都很厉害,但他们歌的风格不尽相同(相同的行为,不同的数据)

创建类与实例

可以通过关键词class来创建一个类,比如创建一个Dog类

class Dog:
    pass

Dog类的内容用pass占位,表示我们的Dog类什么也没做,后面再慢慢丰满它

创建完类后,就可以通过它来创建实例

比如创建两个dog实例

dog1 = Dog()
dog2 = Dog()

实例属性

dog应该要有个名字,我们可以给两个dog实例添加上name这个属性,来表示它们是不同的dog

dog1.name = '小白'
dog2.name = '小黑'

print('我是dog1,我叫' + dog1.name)
print('我是dog2,我叫' + dog2.name)

所以可以通过实例.属性这样的语法来查看/设置某个实例的属性

构造方法

用上面的方法来给实例设置属性非常麻烦,比如来了一个新dog,叫大黄,就要

dog3 = Dog()
dog3.name = '大黄'
print(dog3.name)

需要两行代码,非常麻烦,有没有更方便的办法呢?

可以在创建实例时,就给实例绑定上属性

利用 __init__ 魔法方法就可以做到,它会在创建实例时被调用

利用它,我们可以把Dog类改造成下面这个样子

class Dog:
    def __init__(self, name):
        print(name, '实例正在被创建...')
        self.name = name
        
dog1 = Dog('小白')
dog2 = Dog('小黑')
dog3 = Dog('大黄')
print(dog3.name)
# 小白 实例正在被创建...
# 小黑 实例正在被创建...
# 大黄 实例正在被创建...
# 大黄

看到def,你可能看出了,方法不就是函数吗

是的,方法其实就是函数,只不过在类中定义的函数与普通的函数有些不同,它多了一个self参数,而且看到我们在调用时也没有传递self参数,只传了name参数

这是因为在调用方法时,Python解释器会把self给传进去,并不需要我们主动传

self变量永远指向调用它的实例,后面我们再加深理解

实例方法

目前我们可爱的dog只有一个名字,但是讲道理

dog应该要有年龄(数据),它还可以唱、跳、rap(行为/功能)

Python零基础入门教程 14.类与对象

下面我们给Dog类增加一个age属性,然后再增加一些"动作"

class Dog:
    """
    我们的狗有姓名有年龄
    还会跑、会打招呼
    skr!
    """
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def about_me(self):
        """
        自我介绍
        """
        print('大家好,我是', self.name, '今年', self.age, '岁')
    def run(self):
        """
        用于让doge跑起来
        """
        print(self.name + '溜了...')
    def hi(self, other):
        """
        用于让doge向别人打招呼
        """
        print('汪汪汪, how are you? ', other)

dog3 = Dog('大黄', 2)
dog3.about_me()
dog3.hi('观众朋友')
dog3.run()

ok,那么about_merunhi这三个方法就是实例方法,它们的调用方法除self外和普通函数一模一样,参数必须对应上,否则会报错

总结

这节课讲了Python面向对象的基础知识

我们通过创建类/实例成功让dog有了实体,通过实例属性与方法让它变得更真实,终于有点那味儿了

下节课接着深入面向对象