1、什么是 new
用于在创建实例对象前调用,不需要直接使用 new 方法
class Demo:
# 在创建对象前调用,new 可以对数据进行一个处理
def __new__(cls, age):
if age < 18:
return print('你当前的值小于18')
haha = Demo(10)
2、单例模式
是一个常见的设计模式,用于确保一个类只有一个实例
普通模式:
# 创建一个类
class Demo:
# 这里还没有实现代码,用 pass 占位,是一个空语句,它不做任何事情
pass
# 创建三个实例
a = Demo()
b = Demo()
c = Demo()
# 通过 id 就可以访问到实例的内存地址
print(id(a),id(b),id(c))
F:\python\python.exe "D:\muyi\my python\练习.py"
1655893067464 1655893118152 1655893118088
单例模式:
# 创建一个类
class Demo():
# 这里还没有实现代码,用 pass 占位,是一个空语句,它不做任何事情
pass
# 创建三个实例
a = Demo()
b = a
c = a
# 通过 id 就可以访问到实例的内存地址
print(id(a),id(b),id(c))
F:\python\python.exe "D:\muyi\my python\练习.py"
1829411023336 1829411023336 1829411023336
3、类中的私有
在名字前加上 __ 就是私有,属性名前加就是私有属性,方法也是同理,私有方法和私有属性只能在内部被访问,公有方法可以在全局被访问
# 类中的私有
class Demo:
# 私有属性
__name = '木易'
# 私有方法
def __func(self):
print(f'只能我自己访问,私有属性({self.__name}),外部访问不到')
# 公有方法
def func2(self):
# 私有方法和私有属性只能在类的内部使用
return self.__func()
# 创建实例
A = Demo()
A.func2()
# 使用 __init__
class Demo:
def __init__(self, name):
self.__name = name
# 私有方法
def __func(self):
print(f'私有属性({self.__name})只能我自己访问')
# 公有方法
def func2(self):
return self.__func()
# 创建实例
A = Demo('木易')
A.func2()
4、装饰器
作用:避免代码重复编写、简化 流程、职责分离、增强代码可读性
注意事项:在闭包内,必须要传入一个形参,这个形参就是所有函数,调用形参就是调用所有函数
def func(a):
def func1():
# 调用函数,a = 所有装饰器的函数
a()
print('我爱你')
print('亲爱的姑娘')
print('---------------------')
return func1()
我们想使用装时器,首先得先定义一个闭包
def func():
def func2():
print('我是闭包返回的值 1 ')
print('我是闭包返回的值 2 ')
return func2()
func()
函数名前加 @闭包名 是装饰器、也称帽子
# 装饰器
def func(a):
def func1():
# 调用函数,a = 所有装饰器的函数
a()
print('我爱你')
print('亲爱的姑娘')
print('---------------------')
return func1
# 函数名前加 @闭包名 —— 这就叫 装饰器
@func
def a():
print('我是函数 a ')
a()
@func
def b():
print('我是函数 b ')
b()
@func
def c():
print('我是函数 c ')
c()
F:\python\python.exe "D:\muyi\my python\练习.py"
我是函数 a
我爱你
亲爱的姑娘
---------------------
我是函数 b
我爱你
亲爱的姑娘
---------------------
我是函数 c
我爱你
亲爱的姑娘
---------------------
进程已结束,退出代码0