面向对象的两大组成部分
类 :只是一个模糊的概念
对象:具体存在的值
类的组成:
类名:类的名字(变量名、函数名、类名都是标识符,命名方式一致)
类的属性:类里面的变量(init方法里面,带self的变量)
类的方法:类里面的函数
类的使用:
1.定义一个类 class 类名():
2.实例化对象(创造一个具体的值取调用里面的属性或者方法)
类里面的方法必须调用之后才会执行
init方法有了对象之后会自动执行
self的功能
1.self就是当前对象本身(相当于这个对象在类里面的形参)
类的创建
class 类名()
def __init__(self,形参1,形参2)
self.属性名1 = 属性值1(形参1)
self.属性名2 = 属性值2(形参2)
def 自定义的函数名(self):
这个函数的具体代码
实例化对象
对象名 = 类名(属性值1,属性值2)
hasattr(对象名,“属性名”) 判断属性是否存在
getattr(对象名,“属性名”) 得到属性值,没有则报错
setattr(对象名,“属性名”,“属性值”) 设置属性值,有则改无责增
delattr(对象名,“属性名”) 删除属性
class Person(object):
def __init__(self,name,age,sg,tz):
self.name = name
self.age = age
self.sg = sg
self.tz = tz
def play(self):
print(f"{self.name}在打游戏")
def study(self):
print(f"{self.name}在学习")
对象关系方法
issubclass(类1,类2) 判断第二个类是否是第一个类的父亲
isinstance(对象,类型) 判断这个对象是否属于后面的类
is 判断对象和类型的时候不考虑继承关系
isinstance 考虑继承关系
魔法方法: 不需要调用,满足情况自动执行
命名方式: __方法名__()
__new__
场景:在对象要被实例化的时候执行
功能:实例化对象
__init__
场景:对象被实例化之后执行
功能:给对象初始化属性值
__del__
场景:对象在内存中被释放的时候自动执行
功能:删除这个对象
__str__
场景:对象被实例化之后执行
功能:修改print打印对象的样子
__repr__
场景: 打印对象的时候执行 (修改直接引用对象时候的返回结果)
功能: 修改打印对象时候的返回值
注意:返回值都必须是字符串类型
class Lei(object):
def __new__(cls, *args, **kwargs):
print("new , 创建对象")
"""
由于子类和父类的方法名一致,覆盖了原有功能
解决:super().方法名
cls:代指的当前类
"""
return super().__new__(cls)
def __init__(self, name):
self.name = name
def __str__(self):
return 'hello cls28!'
def __repr__(self):
return "马上放假了,真开心"
def __del__(self):
print("我要走了")
Adam = Lei("Adam")
print(Adam.name)
单例模式: 只有一个实例化对象的模式
(比如只需要一个对象作为管理员存在的场景)
对象由new方法进行实例化,因此如果只想要实例化一个对象,我们需要对new方法进行限制