【Python】Python学习笔记14

代码笔记:

'''
__init__()方法与__new__()方法的区别:
    __new__()方法:
        用途:是一个静态方法,用于创建和返回一个新实例。它在类实例化时首先被调用。
        返回值:必须返回一个实例对象,通常是通过调用 super().__new__(cls)。
    __init__()方法:
        用途:这是一个实例方法,用于初始化已经创建的实例。它在 __new__ 之后被调用。
        不需要返回任何值,通常用于设置实例的属性。
如果没有在类中重写new方法,会默认调用object中的new方法。
'''
class Bird(object):
    def __new__(cls, *args, **kwargs):
        print('this is new method')
        print(cls)
        return super().__new__(cls)
    def __init__(self,name):
        self.name = name
        print(f'the bird is {self.name}')
bird = Bird('Owl')
print(bird)
'''
单例模式:是一种设计模式,确保一个类只有一个实例,并提供全局访问点。其主要目的在于控制对共享资源的访问,例如数据库连接或配置设置。
    特点:
        1.唯一性:类只能创建一个实例。
        2.全局访问:提供一个方法获取该实例。
        3.延迟加载:实例在第一次使用时创建,而不是在程序启动时。
    设计流程:
        1.定义一个类属性,初始值为None,用来记录单例对象的引用;
        2.重写__new__()方法;
        3.进行判断,如果类属性为None,把__new__()方法返回的对象引用保存到类属性中;
        4.返回类属性中记录的对象引用。
    应用场景:
        1.回收站对象;
        2.音乐播放器,一个音乐播放器负责播放的对象只有一个;
        3.游戏软件中的场景管理器;
        4.配置数据库时连接池的设计。
    注意:模块就是天然的单例模式。
'''
class Singleton(object):
    """单例模式"""
    obj = None  # 类属性;记录第一个被创建对象的引用
    def __new__(cls, *args, **kwargs):
        if cls.obj == None:     # 判断类属性是否为空
            cls.obj = super().__new__(cls)
        return cls.obj
s1 = Singleton()
print(s1)
s2 = Singleton()
print(s2)       # 每次实例化对象都是同一个,指向同一个内存地址。
'''
魔法方法(属性):指具有特殊功能的方法(属性),通常是__xx__()的方式表示。
常见的魔法方法(属性):
    1.__doc__:对象的描述信息。
    2.__module__:对象所在的模块。
    3.__class__:对象所在的类。
    4.__str__():返回一个字符串。
    5.__call_():使一个实例对象成为可调用对象。
'''
class Hero(object):
    """英雄类——描述信息"""       # 只有多行注释才是描述信息
    def __str__(self):
        return '__str__()方法的返回值'
    def __call__(self, *args, **kwargs):
        print('可调用对象')
hero = Hero()
print(hero.__doc__)
print(hero.__module__)
print(hero.__class__)
print(hero, hero())

运行结果:

this is new method
<class '__main__.Bird'>
the bird is Owl
<__main__.Bird object at 0x000001482F2EF040>
<__main__.Singleton object at 0x000001482EE7B610>
<__main__.Singleton object at 0x000001482EE7B610>
英雄类——描述信息
__main__
<class '__main__.Hero'>
可调用对象
__str__()方法的返回值 None

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值