五、面向对象

面向对象/过程

面向对象

谁来做,注重结果
三大特性:封装、继承、多态

封装

属性和方法封装在类中

继承

代码重用,相同代码不需要重复编写,减少冗余

子类(派生类)可以拥有父类(基类)的所有方法和属性

# 类A的父类是object类,object类是python中的原始类
class A:
	pass
# 类B继承类A
class B(A):
	pass

方法调用的顺序是子类——父类——object,若object中没有则代码报错

重写

在子类中定义和父类同名的方法
当父类中的方法不能满足子类对象需求时进行重写,重写后的方法只会调用子类中的方法,不再调用父类中的方法

  1. 覆盖,完全重写,无需父类中的内容
  2. 扩展,依旧调用父类中的内容,添加一些新的内容

多态

不同对象调用相同方法会产生不同的结果

面向过程

怎么做,注重过程

类和对象

开始声明类时,将创建一个新的命名空间,作为局部作用域,类声明完成时,将创建一个类对象
实例对象,通过类创建的对象
类对象,就是类,是python解释器在执行代码的过程中创建的

抽象概念,泛指具有相同或相似特征和行为的事物

  1. 类名:大驼峰命名法
  2. 属性:事物的特征
  3. 方法:事物的行为

对象

具体概念,特指某一个事物

代码设计

定义类

使用class关键字定义类,类中的函数即为方法

class namedef func(self):
		pass

self是普通形参,但调用时没有传递实参值。在执行代码时自动将调用这个方法的对象传递给self,因为self的本质是对象。如下图示例
在这里插入图片描述

创建对象 / 类的实例化

使用类名()创建对象,要通过变量名保存对象地址,变量=类名()

添加属性

类内部,self.属性名=属性值,在类中添加属性通常写在__int__()中
类外部,对象.属性名=属性值,一般不使用

获取属性

类内部,self.属性名
类外部,对象.属性名

调用方法

使用对象.方法名()调用方法

实例方法,类中定义的方法,参数一般为self,即实例对象
类方法,方法名上方使用@classmethod装饰器的方法,参数一般为cls,即类对象
静态方法,方法名上方使用@staticmethod装饰器的方法,一般没有参数,方法中不需要使用实例属性,也不需要使用类属性

魔法方法

双前导双末尾下划线的方法,在满足条件时会自动调用,如__init__()

__init__() 构造方法

创建对象之后自动调用

  1. 给对象添加属性
  2. 创建对象必须执行的代码,用于初始化
  3. 如果有self以外的形参,要注意形参传递
__str__()

使用print(对象)打印对象时自动调用

  1. 关于对象的属性信息
  2. 若类中没有定义该方法,print(对象)是默认输出对象的内存地址
  3. 必须返回字符串
__del__() 析构方法

删除对象时自动调用

  1. 代码执行结束,所有对象都会被删除
  2. 使用del 对象可以删除对象,若一个对象存在多个引用,则需要删除所有引用才可彻底删除对象
class Person:
	def __init__(self,name,weight):
		self.name=name
		self.weight=weight
	def __str__(self):
		return f'{self.name}的体重是{self.weight}kg'
	def __del__(self):
		print('代码结束,删除对象')
	def run(self):
		self.weight=self.weight-0.5
	def eat(self):
		self.weight=self.weight+1
		
a=Person('小明',75)
print(a)
a.run()
print(a)
a.eat()
print(a)

在这里插入图片描述

dir(对象)

查看对象的所有方法,包括魔法方法和自定义方法

权限

python中定义的属性和方法,可以添加访问控制权限

公有

  1. 直接书写的属性和方法
  2. 公有的属性和方法,可以在任意地方访问和使用

私有

  1. 类内部的属性名或方法名前带__为私有(类外部用__的话并不是添加私有)
  2. 私有的属性和方法,只能在当前类的内部使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值