new、单例模式、装饰器

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值