复习
@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 主动抛出异常
标签:__,return,day25,self,面向对象,print,高阶,def,cls From: https://www.cnblogs.com/yyyjw/p/17923628.html