day25 面向对象高阶
复习
@classmethod方法 类内部使用@classmethod修饰器的方法就是绑定到类的方法→类方法 类方法可以直接通过类调用而无需实例化
def __init__(self): 类的构造函数 创建一个实例(对象)时自动调用
在py中self和cls只是约定俗成的命名,没有特殊的含义
self通常作为对象方法的第一个参数,指代对象本身
cla通常作为类方法的第一个参数,指代类本身
class Worker:
def __init__(self, name, age, height, salary):
self.name = name
self.age = age
self.height = height
self.salary = salary
@classmethod
def str_handler(cls, string):
name, age, height, salary = string.split('/')
# 将传入的字符串以/分割产生列表,一一对应
return cls(name, age, height, salary)
# 这里return返回的是一个类对象
# 要注意return返回值可以被变量接收,接收后就成为类对象了
A = 'Jack/20/1.75/1000'
a = Worker.str_handler(A)
print(a)
b= Worker('yjw',26,175,400000)
print(b)
打印结果:
<__main__.Worker object at 0x000002CB14E812D0>
<__main__.Worker object at 0x000002CB14E81350>
单例模式:
为了实现同一种调用方式得到的对象是一样的
class Vio:
def __init__(self,shape,width):
self.shape = shape
self.width = width
w1=Vio('water',35)
print(w1)
w2=Vio('water',35)
print(w2)
打印结果:
<__main__.Vio object at 0x000001A1BA4B0F90>
<__main__.Vio object at 0x000001A1BA4B1110> #直接调用即使初始化参数一样但实际上不是同一个对象
利用装饰器实现单例模式:
SHAPE='swater'
WIDTH='36'
def deco(cls):
instance=cls(SHAPE,WIDTH)#初始化对象
def wrapper(*args, **kwargs):
if len(args)==0 and len(kwargs)==0:
return instance#这里千万不能写return cls(SHAPE,WIDTH)
else:
return cls(*args, **kwargs)
return wrapper
@deco
class Vio:
def __init__(self,shape,width):
self.shape = shape
self.width = width
w1=Vio()
w2=Vio()
print(w1==w2)
print(w1)
print(w2)
打印结果:
True
<__main__.Vio object at 0x0000023F704D1850>
<__main__.Vio object at 0x0000023F704D1850>
异常处理:
try:
1/0
except Exception as e:
print(e)
打印结果:
division by zero
raise 主动抛出异常
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)