我们今天就一起聊一聊Python中类与对象的那些事儿~
本文共2473个字,阅读时长7分钟,建议先收藏后观看。
一、类与对象
1. 什么是对象(Object)
何谓对象???
你的小女朋友是你的对象,你的小男朋友也是你的对象(男男女女也成立(咳!咳!))。哲学一点来说,万物皆对象,来敲个重点,只要是客观存在的事物都是对象。
面向对象编程(Object Oriented Programming):正是一种以对象为中心的编程思想,它在软件设计、数据库设计、网络结构设计、人工智能算法等领域有着非常广泛的应用。
2.什么是类(Class)
举个简单的例子:大学表白墙找对象的公告写了一些条件:“180cm以上的男生,会打网球,学习好,阳光帅气...”。
那么正巧一个名叫手冢国光的男孩具备这些条件,这个手冢国光是客观存在的一个人,他就是对象(Object)。
而这些条件可以理解为类(Class),类是确定对象将会拥有的特征(属性)和行为(方法),它不是具体客观存在的东西。
总结一下类的特点:类是对象的类型。
类是具有相同属性和方法的一组对象集合(一个类可对应多个对象)。
怎么来理解呢?很明显手冢国光是客观存在的对象,她具有180cm的特征(属性),他会网球,会学习这些行为(方法)这就统称为类,换句话说可以理解为类型,比如你喜欢什么类型的女孩儿/男孩儿,他们所具备什么属性和行为。
3.对象的属性
对象的属性就是对象具备的各种特征,每个对象的每个属性都具有特定的值。说人话就是手冢国光这个对象来说她的属性是“性别 = 男;身高 = 180cm ”这就是对象的属性。
4.对象的方法
对象的方法就是对象执行的操作,也就是说对象能干什么?这就称为方法。比如手冢国光他的方法就是“学习、打网球”。
5.类与对象的关系和区别类是抽象的概念,仅仅代表事物的模板,比如说“女朋友”、“男朋友”。
对象是一个能够“看得到,摸得着的”具体的实体,比如手冢国光。
二、类的创建跟调用:(类的方法均指实例方法)
1.类的创建
来个例子:
#创建电脑类的示例代码
class Computer:
screen = True
def start(self):
print('电脑正在开机中……')
电脑类,都有屏幕,所以属性screen的值为True;开机时会显示“电脑正在开机中……”。
具体含义:
class Computer: #类的创建:class + 类 + 英文冒号。
screen = True #类的属性创建:通过赋值语句(即定义“是怎样的”)。
def start(self):#实例方法的创建:def + 方法名(self)。
print('电脑正在开机中……')#方法具体执行过程:即定义“能做什么”。
注:在类中赋值的变量叫做属性,类中定义的函数叫做方法(以此区别普通函数)
实例方法是指类中带self的函数,是类方法的一种形式,最是最常用的用法。
实例方法的创建语句,和函数的定义语句很类似,唯一不同的是:实例方法中有个必须放在首位的参数self。
类名的首字母要大写,以便让我们轻松地辨认出“哦!这个是类!”
来个例子:创建一个“中国人”的类,并为其创建一个属性和一个方法。
# 类名首字母大写
class Chinese:
# 用赋值语句,创建类的属性
eye = 'black'
# 创建实例方法时,不要漏了 self
def eat(self):
print('吃饭,主食是大米。')
不过运行代码,终端会一片空白,这是因为我们只完成了创建,还没有调用。
2.类的调用
来个例子:
class Computer:
screen = True
def start(self):
print('电脑正在开机中……')
my_computer = Computer()
print(my_computer.screen)
my_computer.start()
终端显示
True
电脑正在开机中……
倒数第二行:my_computer.screen先是获取到类属性screen对应的值True,再用print()打印出来。最后一行:my_computer.start()调用方法start(),这个方法的功能是直接打印出'电脑正在开机中……'。
有人可能会想:为什么实例调用方法时不用传参,定义时不是有个参数self吗?这就是参数self的特殊之处:在定义时不能丢,在调用时要忽略。
来个例子:
class Chinese: # 创建一个类
eye = 'black'
def eat(self):
print('吃饭,主食是大米。')
wufeng = Chinese() # 类的实例化
print(wufeng.eye) # 实例调用类属性
wufeng.eat() # 调用类中的方法(传参不用管self)
终端显示
black
吃饭,主食是大米。
类的创建于调用三部曲:创建一个类 —— 类的实例化 —— 用实例调用类的属性和方法。
三、创建类的两个关键点
1.特殊参数:self
正式揭秘特殊参数self的作用:self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行(self.属性=属性,就是把属性弄到实例对象上)。
换言之,self 是所有实例的替身。
来个例子:
class Name:
def greeting(self):
print('很高兴在知乎遇见你')
def say(self):
self.greeting()
print('我是真小凡')
person = Name()# 创建实例person
person.say()# 调用say()方法
终端显示
很高兴在知乎遇见你
我是真小凡
当最后一行实例person调用say()方法时,便会执行say()内部的语句(第七行开始)。
此时self.greeting()就变成person.greeting(),也就是调用实例方法greeting(),打印出'很高兴在知乎遇见你',再打印出'我是真小凡'。所以self代表的是类的实例本身,方便数据的流转。
需要记住两点:只要在类中用def创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)。
当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名或self.方法名的格式。
2.特殊方法:初始化函数定义
初始化方法的格式是def __init__(self),是由init加左右两边的【双】下划线组成( initialize “初始化”的缩写)。
初始化方法的作用在于:当每个实例对象创建时,该方法内的代码无须调用就会自动运行。
来个例子:
class People:
# 初始化方法的创建,init两边双下划线。
def __init__(self,name,text,you):
self.name = name # self.name = '真小凡'
self.text = text # self.text = '文字'
self.you = you # self.you = '你们'
def write(self):
print(self.name + '写出了' + self.text)
def meet(self):
print(self.name + '遇见了' + self.you)
person = People('真小凡','文字','你们') # 传入初始化方法的参数
person.write()
person.meet()
终端显示
真小凡写出了文字
真小凡遇见了你们
很好理解的一个方法:
记住初始化构造函数会自动执行,它可以帮我们快速的把一些属性绑定到实例对象上。
辅助理解:类可以看成模板,模板的特性:拥有通用的基本属性+基本方法。
实例化就是根据从通用基础模板生成的单独个体,因为模板需要多次利用所以每次实际应用的是实例出来的实例对象,当然实例对象可以利用类里面的属性跟方法,但是实例对象之间都是互相独立的。
加了self的都是涉及到实例对象,初始化构造函数,可以简单理解为快速复制粘贴并且进行小修改的操作。
本人后续会持续在知乎更新,小伙伴们点个赞,按个关注呗,笔芯 @真小凡 。