python如何找对象_学会用Python找对象——第一篇

本文介绍了Python的面向对象编程基础,包括对象、类的概念,通过实例解析了__init__的作用,并探讨了self参数的意义。文章通过汽车和学校的例子,详细解释了面向对象编程的思想与实践。
摘要由CSDN通过智能技术生成

f6530a4c47786a4f7e56a7ff1d4feb57.png

今天我们用Python来找对象

找对象第一步,

1、理解什么是对象

2、理解类和对象

3、掌握__init__

4、self的那些事

一、什么是面向对象?

面向过程:之前我们学习过函数式编程,,也就是面向过程编程(pop),是一种是事件为中心的编程思想。就是分析出解决问题所需的步骤,然后用函数把这些步骤实现,并按顺序调用。

例如:举个例子:汽车启动,汽车运行、汽车到站。汽车启动是一个事件,汽车到站是另一个事件,面向过程编程(pop)的过程中我们关心的是事件,而不是汽车本身。针对上述两个事件,形成两个函数,之后依次调用。

面向对象:面向对象编程(oop),对于上面汽车的例子,这个时候我们的关注点不再是汽车的发动,到站这些行为,我们的关注点在于汽车本身,也就是我们的研究对象是汽车,汽车具有这些行为过程。

也就是说,两者的区别在于关注点不同,面向过程,注重的是分解,面向对象、注重的是一个整体。

自己的拙见:不对的地方,后台留言指正。

二、类和对象

类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体

*万事万物皆可是对象,一个人可以是对象,一棵树,一只狗,一辆车,这些都可以是对象。

以汽车为例,启动,运行,到达

以函数式编程来实现这个过程,分三步,定义三个函数。

def start_up():print('启动汽车')def run():print('汽车运行中')def arrive():print('汽车到达')start_up()run()arrive()# 启动汽车# 汽车运行中# 汽车到达

面向对象编程(类)来实现

类的定义使用关键字class

类的属性

类具有数据属性和函数属性

#定义一个类,类的首字母大写,PE8风格class Car():#定义实现这些行为的函数(类属性)def start_up(self):print('启动汽车')def run(self):print('汽车运行中')def arrive(self):print('汽车到达')car = Car()car.start_up()car.run()car.arrive()# 启动汽车# 汽车运行中# 汽车到达

我们定义的这些函数就是类的 函数属性

例:定义一个学校

学校有名字,所在地址,建立时间等

学校是用来干嘛的? 教书育人(学习),搞研究。

class School():def __init__(self, name,address, establish_time):self.name = nameself.address = nameself.establish_time = establish_timedef learn(self):print('学习')def research(self):print('研究')

在这个例子中定义了 数据属性,name,address

函数属性 learn,reseach

关于数据属性,和函数属性,后面会详解。

0eaba8bac1da6123eddc7186a6c03d10.png

这里还看到一个 __init__函数(两个下划线)

__init__用来初始化类的数据属性

然后我们定义了两个函数,每一个函数中必须有一个参数(指定为 self)

下面我们来详细讲解一下__init__,和 self。

三、详解__init__

刚才说到,__init__ 是用来初始化数据属性的,

当然我们可以使用其它方法来初始化数据属性

** __init__ 不能有返回 ,就算是返回空也不行

这里以人作为对象来讲解

人:名字,年龄,性别

第一种

class Person():name = '老王'age = '18'gender = '男'def run(self):print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))#实例化一个对象p1 = Person()p1.run() #老王是个男生,今年18岁#再实例化一个对象p2 = Person()p2.run() #老王是个男生,今年18岁#但是有个问题,不可能每一个人的#名字都叫 老王#修改一下 p2 的数据属性p2.name = '隔壁老王'p2.age = '33'p2.gender = '女'p2.run() #隔壁老王是个女生,今年33岁

方法二

class Person():name = '老王'age = '18'gender = '男'def run(self):print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))#先实例化两个对象p1 = Person()p2 = Person()#这里可以为实例化对象绑定一个函数属性def init(self, name, age, gender):self.name = nameself.age = ageself.gender = gender#这里的self传入的参数应该是 实例化后的对象init(p1, '老王',24, '男')init(p2, '老刘', 66,'男')p1.run() #老王是个男生,今年24岁p2.run() #老刘是个男生,今年66岁

方法三

class Person():name = '老王'age = '18'gender = '男'def init(self, name, age, gender):self.name = nameself.age = ageself.gender = genderdef run(self):print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))#先实例化两个对象p1 = Person()p2 = Person()#这里的self传入的参数应该是 实例化后的对象p1.init('老王',24, '男')p2.init('老刘', 40,'男')p1.run() #老王是个男生,今年24岁p2.run() #老刘是个男生,今年40岁

方法四

class Person():name = '老王'age = '18'gender = '男'def __init__(self, name, age, gender):self.name = nameself.age = ageself.gender = genderdef run(self):print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))#先实例化两个对象p1 = Person('隔壁老王',24, '男')p2 = Person('老刘', 40,'男')p1.run() #隔壁老王是个男生,今年24岁p2.run() #老刘是个男生,今年40岁

方法一

每实例化一个对象就需要修改一次,量大了就不好玩了

方法二

改用了绑定函数的方法来初始化,可以直接传入参数,稍微简单了点。

方法三

和第二种差不多,只是将函数在定义类的时候绑定了

方法四

和第二种差不多,但是这里初始化不需要自己调用,实例化的时候会自己调用。

四、如何理解 self

不难发现,我们定义的每一个类的函数方法,都有一个self的参数,这个参数有什么作用呢?self用于将属性绑定在这个类,不论是函数属性还是数据属性。

直接通过代码学习

class Person():name = '老王'age = '18'gender = '男'def __init__(self, name, age, gender):self.name = nameself.age = ageself.gender = genderdef run(self):print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))def run_test():print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))#先实例化两个对象p1 = Person('隔壁老王',24, '男')p2 = Person('老刘', 40,'男')p2.run_test()

23009ce68c61834065f3ccb1fe613db2.png

这里报错,说必须传入一个参数

我们传入一个是参数

但是我们不传入 self

class Person():name = '老王'age = '18'gender = '男'def __init__(self, name, age, gender):self.name = nameself.age = ageself.gender = genderdef run(self):print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))def run_test(args):print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))#先实例化两个对象p1 = Person('隔壁老王',24, '男')p2 = Person('老刘', 40,'男')p2.run_test()

2b394560e0a555fbb63cff40a9ef4bdc.png

将这部分

def run_test(args):print("{}是个{}生,今年{}岁".format(.name,self.gender,self.age))

改成

def run_test(args):print(args.name)

完整代码

class Person():name = '老王'age = '18'gender = '男'def __init__(self, name, age, gender):self.name = nameself.age = ageself.gender = genderdef run(self):print("{}是个{}生,今年{}岁".format(self.name,self.gender,self.age))def run_test(args):print("{}是个{}生,今年{}岁".format(.name,self.gender,self.age))#先实例化两个对象p1 = Person('隔壁老王',24, '男')p2 = Person('老刘', 40,'男')p2.run_test() #老刘

我去,竟然还可以这样,不传入self也是可以的,

没错这里的self并不是什么关键字,也就是说,你可以随意的传入其他的参数,(当然千万别这样做,self已经是一个约定俗称,别人不希望你这么改,你也不希望别人这么改)但是你需要做的是,在这个函数里调用时你不能再使用 self. 而是你传入的参数 比如 args.

class Person():name = '老王'age = '18'gender = '男'def __init__(s, name, age, gender):s.name = names.age = ages.gender = genderdef run(ss):print("{}是个{}生,今年{}岁".format(ss.name,ss.gender,ss.age))def run_test(args):print(args.name)#先实例化两个对象p1 = Person('隔壁老王',24, '男')p2 = Person('老刘', 40,'男')p1.run() #隔壁老王是个男生,今年24岁p2.run_test() #老刘

bd42fd93b691eda1b96aa84e736d0af1.png

总结

1bc2177f9e1ff1f4b5ff5213dd69fa92.png

1、类具有数据属性和函数属性(下一篇会详细讲解)

2、__init__ 用于初始化数据属性,并且不能有返回值。

3、self参数用于蒋实例化对象的数据属性和函数属性绑定到这个函数,但是它并不是特定的,你可以使用其他的代替,当然并不建议这么做。

4、记得 在文末右下角 点一下 在看

python学习专栏

python大神都在关注

fc98e8e083be6d8ba5cf45012cec6ef0.png

喜欢,就为我标星

38c74a20885d8728e22826cb90e192b2.png

我就知道你“在看”

f7d82f12005162532cdc2a07a56caabe.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值