面向过程:是分析出解决问题所需要的步骤,然后用函数把这些步骤一步步实现,使用的时候一个个依次调用就可以了。eg:手洗衣服——注重过程:衣服 -> 放在盆里 -> 放点洗衣粉 -> 加水 -> 浸泡十分钟 -> 搓一搓 -> 清洗干净 -> 拧干 -> 晾起来。
面向对象:是把构成问题事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。eg:衣服 -> 打开全自动洗衣机 -> 扔衣服 -> 按钮 -> 晾起来。对象:洗衣机。
类和对象:在面向对象编程过程中,有两个重要组成部分:类和对象。
①类:用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。
类的定义:class 类名:... (类名的规范:大驼峰命名规则:每个单词首字母大写)
②对象:通过类定义的数据结构实例,是类的具体表现,是面向对象编程的核心。
创建对象的格式:对象名 = 类名()
# 创建类
class Test:
pass
# 创建对象(会分配新的内存空间) ————对象名 = 类名()
p = Test()
print(p)
③类和对象的区别:类是对客观世界中事物的抽象,而对象是类实例化后的实体。
④类和对象的关系:对象是由类派生的、创建的。一个类可以创建无穷多个对象,每个对象都属于类。类只有创建对象才可以使用。
方法:类中定义的函数
self:是实例方法中的第一个参数,代表调用该方法的对象本身
# 定义类
class Test:
# 定义方法 在类里面的函数
def add(self): # self =》 对象
print('hi')
print(self) # 调用该方法的对象的信息
t = Test() # 直接通过类名不能调用实例方法,只能通过对象进行调用
print(f't:{t}') # t:<__main__.Test object at 0x0000027A0CF02FD0>
t1 = Test()
print(f't1:{t1}') # t1:<__main__.Test object at 0x0000027A0CF72310>
t1.add() # hi\n (t1的对象本身)<__main__.Test object at 0x0000027A0CF72310>
属性:类属性和实例属性
类属性:在类里面、方法外面定义
实例属性:定义在方法里面,定义格式为:self.属性名 = 值
添加实例属性的方式:类里面添加实例属性:self.实例属性名 = 值
类外面添加实例属性:对象名.实例属性名 = 值
获取实例属性:类里面获取实例属性:self.实例属性名
类外面获取实例属性:对象名.实例属性名
# 属性
class Fun:
# 类属性,定义在类中的属性
test = '类属性'
def data(self):
# 实例属性,定义在实例方法中, self.属性名 = 值
self.name = '实例属性'
print(self.name)
# 类外面访问类属性 类名.属性名/对象名.属性名
print(Fun.test) # 类属性
f = Fun()
print(f.test) # 类属性
# 类外面访问实例属性,对象名.实例属性名 注意:类名不能访问实例属性 ,只有调用方法,该方法才会执行
f.data() # 实例属性
print(f.name) # 实例属性
构造函数:__init__方法具有初始化的作用,也就是当该类被实例化的时候会执行该函数
class Funa:
# 构造函数
def __init__(self):
print('这是一个构造函数')
# 创建对象时,__init__函数会自动执行
f = Funa() # 这是一个构造函数
class Func:
def __init__(self, mz, nl):
self.name = mz
self.age = nl
print(f'我的名字是{self.name},我的年龄是{self.age}岁')
f1 = Func('tony', 18) # 我的名字是tony,我的年龄是18岁
析构函数:__del__是对象在被垃圾回收的时候起作用的一个方法,它的执行一般也就意味着对象不能继续引用,回收内存
# 析构函数
class Func:
def __init__(self, mz, nl):
self.name = mz
self.age = nl
print(f'我的名字是{self.name},我的年龄是{self.age}岁')
def __del__(self):
print(f'{self.name}被回收')
f1 = Func('tony', 18) # 我的名字是tony,我的年龄是18岁\n tony被回收
# del f1 # (手动回收)
f2 = Func('o', 18) # 我的名字是o,我的年龄是18岁\n t被回收
# 当代码语句都执行完,创建的对象会被回收,就自动执行__del__函数
__str__函数:当使用print输出对象的时候,若定义了__str__(self)方法,就可以自定义打印内容
# __str__函数 自定义对象的描述信息
class Person:
def __init__(self, mz, nl):
self.name = mz
self.age = nl
print(f'我的名字是{self.name},我的年龄是{self.age}岁')
def __str__(self):
return '自我介绍' # 设置对象信息的描述,必须使用return返回字符串的格式
p = Person('tony', 18)
print(p) # 若没有__str__函数,则会返回<__main__.Person object at 0x000001767D782FD0>
# 若有__str__函数,则会返回‘自我介绍’的内容