python基础面向对象 上(入门篇 九)

11 篇文章 1 订阅
2 篇文章 0 订阅

1.面向对象简介

1.1面向过程

  • 面向过程指将我们的程序分解为一个一个步骤,通过对每个步骤的抽象来完成程序。
  • 这种编写方式往往只适用于一个功能,如果要实现别的功能,往往复用性比较低。
  • 这种编程方式符号人类的思维,编写起来比较容易。

1.2面向对象的编程思想

  • 将所有功能统一保存到对应的对象中,要使用某个功能,直接找到对应的对象即可
  • 这种编码方式比较容易阅读,并且易于维护,容易复用。但是编写的过程中不太符合常规的思维,编写相对麻烦

2.类

  • 类简单理解它就是相当于一个图纸,在程序汇总我们需要根据类来创建对象。
  • 类就是对象的图纸,我们也称对象是类的实例(instance)
  • 类是type类型的对象,定义类实际上就是定义了一个type类型对象
  • isinstance() 用来检测一个类是否是另一个类的实例,是则返回Ture,不是则返回False
  • 如果多个对象是通过一个类创建的,我们称这些对象是一类对象
  • 类也是一个对象,类是一个用来创建对象的对象
  • 可以像对象中添加变量,对象中的变量称之为属性 语法:对象.属性名 = 属性值
# 自己定义一个类
# 使用class关键字来定义
# 语法:
# class 类名():
#   代码块
class MyClass:
    pass
m = MyClass() # m是通过MyClass创建的对象、m是MyClass的实例
m2 = MyClass() # m2也是通过MyClass创建的对象、m2是MyClass的另一个实例,m和m2是一类对象都是通过MyClass这个类所创建的类
# 通过isinstance() 用来检测一个类是否是另一个类的实例
r1 = isinstance(m,MyClass)
r2 = isinstance(m2,MyClass)
print(r1)	# 输出为Ture,说明类m是类MyClass的实例
print(r2)	# 输出为Ture,说明类m是类MyClass的实例

# 可以向对象中添加变量,对象中的变量称作属性
# 语法: 对象.属性名 = 属性值
m.name = '葫芦娃'
print(m.name)	# 输出为葫芦娃
# 将葫芦娃这个值添加到对象m属性中,当需要用时,在对象中的属性中寻找

3.类的定义

  • 类包含两部分
    • 1.属性(存储数据)
    • 2.方法(为类中的函数)
  • 调用方法:对象.方法名()
  • 方法调用和函数调用的区别
    函数调用,调用时有几个形参,就会传递几个实参。如果是方法调用,默认传递一个参数,所以方法中至少得有一个形参
  • 在类代码块中,我们可以定义变量和函数
    • 变量会成为该类实例的公共属性,所有的该实例都可以通过 对象.属性名的形式访问
    • 函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名的形式访问
# 定义一个表示食物的类
class Food:
	name1 = "苹果"	# 在类中定义的变量,将会成为所有实例的公共属性,所有实例都可以访问这些变量
	name2 = "土豆"	# 在类中定义的变量,将会成为所有实例的公共属性,所有实例都可以访问这些变量
	def speak(self):	# 在类中定义的函数我们称之为方法,这些方法可以通过类的所有实例来访问
    		print('好吃!')	# 如果是方法调用的时候默认传递一个参数,所以方法中至少要定义一个形参
a1 = Food()	# a1是通过Food创建的对象、a1是Food的实例
a2 = Food()	# a2是通过Food创建的对象、a2是Food的实例
print(a1.name1)	# 输出为苹果
print(a2.name1)	# 输出为苹果
print(a2.name2)	# 输出为土豆

'''
属性和方法的查找流程
当我们调用一个对象的属性时,解析器会现在当前的对象中寻找是否还有该属性,如果有,则直接返回当前的对象的属性值。
如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值。如果没有就报错
'''
print(a1.name1) # 输出为苹果
# 因为在对象a1属性值中没有找到值name1,所以会到创建这个类的类Food这个所有实例的公共属性中寻找,
# 找到了则直接输出,如果在创建这个类的类Food的公共属性中没有找到则会报错
# 因为类中定义的属性和方法都是公共的,任何该类的实例都可以访问,而对象a1,a2都是类Food的实例

4.参数self

4.1属性和方法

  • 类中定义的属性和方法都是公共的,任何该类实例都可以访问
  • 类对象和实例对象中都可以保存属性(方法)
    • 如果这个属性(方法)是所以的实例共享的,则应该将其保存到类对象中
    • 如果这个属性(方法)是摸个实例独有的。则应该保存到实例对象中
    • 一般情况下,属性保存到实例对象中 而方法需要保存到类对象中

4.2self

  • self在定义时需要定义,但是在调用时会自动传入。
  • self的名字并不是规定死的,但是最好还是按照约定是用self
  • self总是指调用时的类的实例
class Food:
	name = "苹果" 
	def speak(self):
		print('%s,好吃!'%self.name)
'''
如果是方法调用的时候默认传递一个参数,所以方法中至少要定义一个形参
第一个参数就是调用方法的本身
如果是a1调用,则第一个参数就是a1
如果是a2调用,则第一个参数就是a2
一般我们都会将这个参数命名为self
'''
a1 = Food() 		# a1是通过Food创建的对象、a1是Food的实例
a2 = Food() 		# a2是通过Food创建的对象、a2是Food的实例
a1.name = "香蕉"		# 将香蕉这个值存储到a1这个对象的属性中
a2.name = "桃子"		# 将桃子这个值存储到a2这个对象的属性中
a1.speak() 		# 输出为香蕉,好吃!
a2.speak() 		# 输出为桃子,好吃!

5.总结

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值