概念介绍
面向对象和面向过程是两种编程思想,编程思想是指对同一个问题的套路方式
面向对象:注重过程,实现细节(函数)
面向对象:注重结果 (封装、继承、多态为面向对象的三大技术)
类和对象
面向对象中有两个重要的概念:类和对象
类:泛指,由对象抽象来的,类在代码中用关键字class定义
注意:object是所有类的基类(相当于上帝),即最开始的类
类名:遵循大驼峰命名规范(‘建议,可不用)
格式:
class 类名(object):
类中代码
对象:特指,是具体存在代码中的,对象由类创建
类外部添加获取属性
不同对象有自己的属性值,不同对象之间属性值没有关系
self 作为类方法的第一个参数,在对象方法调用时,不需要手动传递,由python解释器自动调用该方法的对象传递给self,所以self这个参数代表对象(self是一个形参,可以写成其他的,但默认是self)
class Pet(object):
# 定义函数
def home(self):
print('我养了一只宠物')
# 创建对象
pet = Pet()
# 调用函数
pet.home() # 输出:我养了一只宠物
# 为对象添加属性 对象.属性名 = 属性值
pet.name = '仓鼠' # pet类中添加name属性,属性值 仓鼠
# 获取对象属性值 对象.属性名
print(pet.name) # 仓鼠
# 修改属性值,如果存在修改,不存在添加
pet.name = '哈士奇'
print(pet.name) # 已有仓鼠,所以改为哈士奇
类内部获取属性值
class Pet(object):
def home(self):
print(f'self:id{self}')
print(f'我养了一只{self.name}做宠物')
# 创建对象
pet = Pet()
pet.name = '仓鼠'
pet.home()
print(pet)
# id
# self:id<__main__.Pet object at 0x00000214B46BB198>
# 我养了一只仓鼠做宠物
# <__main__.Pet object at 0x00000214B46BB198>
魔法方法
在python的类中有一种方法,这类方法以两个下划线开头和两个下划线结尾,并在满足某特定条件的情况下,会自动调用,这类方法称为魔术方法
int()
调用时机:在创建对象之后,会立即调用
作用:
- 用来给对象添加属性,给对象属性一个初始值
- 代码的业务需求,每创建一个对象,都需要执行的代码可以写在__init__中
注意:
如果__init__方法中出现self之外的形参,那么在创建对象的时候,需要额外的形参传递实参值
class Pet(object):
def __init__(self):
print("-" * 30)
# 对象.属性名 = 属性值
self.name = '仓鼠'
self.name2 = '哈士奇'
# 创建对象
pet = Pet()
print(f"我养了一只{pet.name}")
pet2 = Pet()
print(f"我养了一只{pet2.name2}")
# ------------------------------
# 我养了一只仓鼠
# ------------------------------
# 我养了一只哈士奇
# 带参数__init__方法
class Pet(object):
def __init__(self, name, age):
self.name = name
self.age = age
pet = Pet('仓鼠', 1)
print(f"我养了一只{pet.name},它{pet.age}岁了")
# 我养了一只仓鼠,它1岁了
__str__方法
调用时机:
- print(对象)会自动调用__str__方法,打印输出结果是__str__方法的返回值
- str(对象)类型转换,将自定义对象转换为字符串的时候,会自动调用
应用:
- 打印对象的时候,输出一些属性信息
- 需要将对象转换为字符串类型的时候
注意:方法必须返回一个字符串,只有self一个参数
class Pet(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"我养了一只{self.name},今年{self.age}岁"
pet = str(Pet('仓鼠', 2))
print(pet)
# 我养了一只仓鼠,今年2岁
__def__方法
调用时机:对象在内存中被销毁的时候(引用计数为0)会自动调用__del__方法
注意:
- 程序代码运行结束,在运行过程中,创建的所有对象和变量都会被删除
- 使用del变量,将这个对象的引用计数变为0,会自动调用
引用计数:是Python内存管理的一种机制,是指一块内存,有多少个变量在引用
- 当一个变量引用一块内存的时候,引用计数加1
- 当删除一个变量,或这个变量不在引用这块内存,引用计数减1
- 当内存的引用计数变为0的时候,这块内存被删除,内存中的数据被销毁