python的特殊方法

特殊方法

复制代码
#特殊方法
"""
特殊方法:
    类中的一些的特殊用途的函数成员,又称为“魔法方法”,或者“魔术方法”
在类中使用首尾双下划线的属性或方法表示特殊的属性和方法
​
特殊方法的特点:
    1不需要手动调用,在满足一定条件的时候自动触发调用
    2函数名以两个下划线开头,以两个下划线结尾
    3是object类中已经定义好了的,重写这些特殊方法就可以使用,重写的函数名必须和object类中定义的特殊方法相同
​
我们主要来学习这些特特殊方法的触发条件,以触发这些我们能够用它来做什么事情
"""
​
#把鼠标光标定位到类名称处,按F4即可跳转到类的定义
# class Girlfriend(object):#对象类
#     #初始化方法
#     #特殊访求
#     def __init__(self,name,age,height,weight):
#         #在 __init__ 方法中用于定义对象属性 自动调用,在对象创建完成之后触发
#         self.name = name#姓名
#         self.age = age#年龄
#         self.height = height#身高
#         self.weight = weight#体重
#
#     def numerical_value(self):
#         return f"姓名:{self.name},年龄:{self.age},身高:{self.height},体重:{self.weight}"
#
# data = Girlfriend("一只懒懒",18,1.98,66)#赋值
# # data = Girlfriend(weight = "一只懒懒",height = 18,age = 1.98,name = 66)#赋值
#
# print(data.numerical_value())#姓名:一只懒懒,年龄:18,身高:1.98,体重:66
​
"""
特殊方法:__del__
    __del__ 方法”析构方法“,它在对象或者实例被销毁时(死亡时)自动调用,通常用于执行清理任务:
    如:释放资源,关闭文件,断开连接(数据库连接,网络转接)等操作
"""
class Person(object):
​
    def __init__(self,name,age):#构造方法
        self.name = name#名字
        self.age = age#年龄
​
    def __del__(self):#析构方法
        print(f"对象:{self.name}已被销毁")
​
data = Person("夯大力",22)#赋值
print(data.name, data.age)#夯大力 22
​
​
#删除对象
del data #手动删除
#不手动删除变量,在程序结束时系统也会自动帮你删除
复制代码
"""
特殊方法 __new__
    __new__ 方法用于创建对象,在类定义对象时自动调用
​
__new__ 方法创建对象完成之后才会调用 __init__ 方法
​
python 所有的类都继承自 object 类
​
​
"""
class Person(object):
​
    def __init__(self):#构造方法
        print(f"__init__ 方法调用")
​
    def __new__(cls):#析构方法
        print(f"__new__ 方法调用")
        return object.__new__(cls)
        #通过父类的 new 方法创建对象,并返回创建对象
        # return super().__new__(cls)
​
# data = Person("3234",342)
# print(data.age)
data = Person()
复制代码
"""
使用 new 方法实现单例模式
​
单例模式是一种设计模式,如果一个类是单例模式的类,那么不管给这个类实例化多少次对象,都只能为这个类创建一个对象
​
工厂模式:用于批量生产
​
设计模式:是一种被反复使用的,经过分类编目的、代码设计经验的总结,可以理解为一些编程的套路,或者可以理解为编程的”设计图纸“
"""
​
#工厂模式
class work(object):
    pass
​
data = work()#定义第一个类对象
print(data)#<__main__.work object at 0x000002163B723B20>
#直接输出一个对象,会输出一个对象的基本信息(其中就包含对象的地址信息)
​
data1 = work()
print(data1)#<__main__.work object at 0x0000018B27AA3AF0>
​
data3 = work()
print(data3)#<__main__.work object at 0x00000178EE1F3C10>
​
print()
print()
​
#单例模式
class Sing(object):
    #定义类属性
    a = None
    name = None
    age = None
​
    def __new__(cls, *args, **kwargs):
        if cls.a is None:
            #如果类属性为空,则为它创建一个实例(对象),否则不创建实例
            cls.a = super().__new__(cls)
        return cls.a
    def __init__(self,name,age):
        if Sing.name is None:
            Sing.name = name
        if Sing.age is None:
            Sing.age = age
​
data = Sing("大规模",22)
data1 = Sing("sdfsd",44)
print(data.name, data.age)
print(data1.name, data1.age)
#查看地址
print(id(data))
print(id(data1))
相关推荐
偷光1 小时前
浏览器中的隐藏IDE: Elements (元素) 面板
开发语言·前端·ide·php
DKPT1 小时前
JVM栈溢出和堆溢出哪个先满?
java·开发语言·jvm·笔记·学习
Rock_yzh4 小时前
AI学习日记——参数的初始化
人工智能·python·深度学习·学习·机器学习
gopyer5 小时前
180课时吃透Go语言游戏后端开发6:Go语言的循环语句
开发语言·游戏·golang·循环语句
青衫客366 小时前
基于 Python 构建的安全 gRPC 服务——TLS、mTLS 与 Casbin 授权实战
python·安全·微服务
-dzk-7 小时前
【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
运维·服务器·python·计算机视觉·3d·三维重建·三维
楼田莉子7 小时前
Qt开发学习——QtCreator深度介绍/程序运行/开发规范/对象树
开发语言·前端·c++·qt·学习
摩羯座-185690305948 小时前
爬坑 10 年!京东店铺全量商品接口实战开发:从分页优化、SKU 关联到数据完整性闭环
linux·网络·数据库·windows·爬虫·python
ACERT3338 小时前
5.吴恩达机器学习—神经网络的基本使用
人工智能·python·神经网络·机器学习
韩立学长8 小时前
【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享
开发语言·python·数据分析