Python零基础入门教程 14.类与对象
类与对象
大纲
视频地址:https://www.bilibili.com/video/av926638403?p=15
前言
面向对象最重要的两个概念就是类(Class)和对象(Object),对象也可以称为实例(Instance)
类相当于一个模板,而实例就是根据这个模板创建出来的,每个实例都有相同的方法(功能),但可能它们的数据不一样
有一个歌手类,四大天王是歌手类的实例,虽然他们唱功都很厉害,但他们歌的风格不尽相同(相同的行为,不同的数据)
创建类与实例
可以通过关键词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(行为/功能)
下面我们给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_me
、run
、hi
这三个方法就是实例方法,它们的调用方法除self外和普通函数一模一样,参数必须对应上,否则会报错
总结
这节课讲了Python面向对象的基础知识
我们通过创建类/实例成功让dog有了实体,通过实例属性与方法让它变得更真实,终于有点那味儿了
下节课接着深入面向对象