Python基本特殊方法之__new__建议收藏

__new__()和不可变对象__new__方法的一个用途是初始化不可变对象,__new()__方法中允许创建未初始化的对象,这允许我们在__init__()方法被调用之前先设置对象的属性例:为f

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

__new__()和不可变对象

  __new__方法的一个用途是初始化不可变对象,__new()__方法中允许创建未初始化的对象,这允许我们在__init__()方法被调用之前先设置对象的属性

  例:为float对象定义一个包含单位信息的属性

  (1)重载__init__()方法

#coding = utf-8

class myfloat(float):   
    def __init__(self, value, unit):
        self.value = value
        self.unit = unit

if __name__ == "__main__":
    f = myfloat(3, "hello")

Python基本特殊方法之__new__建议收藏

说明对于内置的float类不能简单的重载__init__()方法,对于其他的内置不可变类型也是同样的问题,我们不能在不可变对象self上设置新的属性值

  (2)重载__new__()方法

#coding = utf-8

class myfloat(float):
    def __new__(cls, value, unit):
        obj = super().__new__(cls, value)
        #obj.unit = unit
        return obj
        
    def __init__(self, value, unit):
        self.value = value
        self.unit = unit 
        
if __name__ == "__main__":
    f = myfloat(3, "kg")
    print (f.value, f.unit)
    print (f, f.unit)

Python基本特殊方法之__new__建议收藏

__new__()和元类型

  例:实现有序属性

#coding=utf-8

class myclass(type):
    @classmethod
    def __prepare__(mcs, name, bases, **kwargs):
        return super().__prepare__(name,bases,**kwargs)

    def __new__(cls, name, bases, namespace, **kwargs):
        print ("name:",name)
        print ("bases:",bases)
        print ("namespace:",namespace)
        a = super().__new__(cls, name, bases, namespace)
        a._order = tuple(c for c in namespace if not c.startswith("__"))
        print (a)
        print (type(a))
        return a
    def __init__(self, name, bases,namespace, **kwargs):
        super().__init__(name, bases, namespace)

class people(metaclass=myclass):
    name = "zhanglin"
    age = "31"

    def sayhello(self):
        self.color="red"
        print ("say hello")

if __name__ == "__main__":
    p = people()
    print (p._order)

Python基本特殊方法之__new__建议收藏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120191.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 几款连接redis的客户端(GUI客户端),下面记录了我使用的几款

    几款连接redis的客户端(GUI客户端),下面记录了我使用的几款几款连接redis的客户端(GUI客户端),下面记录了我使用的几款一、Redis客户端1、命令行工具命令行(建议使用,简单)比如windows的cmd和Linux、Mac的Terminal,虽然最简单好用。必须保证有redis-cli命令(windows是redis-cli.exe),比如通过安装redis就会有这个命令。2、桌面客户端RediNav(windows桌面客户端,MacOS客户端,根本不能用)评价:垃圾,完全不能用,无论win还是mac平台!我写在

    2022年9月19日
  • 怎样使用cookie登录自己的账号

    在这之前,不管是做测试还是挖漏洞总会遇到这种问题做测试的时候测试项里面有一个会话标识未更新,这种漏洞说白了就是在退出个人账户的时候没有及时的清除cookie,从而让别人利用你的cookie再次登录你的账户,然后测试的时候客户就让测试如何使用cookie登录在挖漏洞的时候一般xss都需要打cookie然后伪造别人的身份登录,其实也是使用打到的cookie登录在这之前我没深入的理解这块,现…

    2022年4月8日
  • 系统端口被占用怎么办?

    系统端口被占用怎么办?

    2021年9月16日
  • 极速pdf文件打印时此计算机未连接到网络,PDF文件不能打印的五种解决方案[通俗易懂]

    极速pdf文件打印时此计算机未连接到网络,PDF文件不能打印的五种解决方案[通俗易懂]原标题:PDF文件不能打印的五种解决方案有时我们会发现有些PDF文档虽然能够正常打开,点击打印缺没有反应,是打印机坏了吗?当然不是,PDF不能打印90%是被加密,想要正常重新打印其实很简单。方式一:用老版PDF阅读器不常用也是比较难实现一种解决方法,PDF防打印只是设置了个标志位,大多数PDF软件都遵循这个标准,但用某些老版本的PDF阅读器,就会发现它不支持“禁止打印”“禁止复制”的…

    2022年5月25日
  • 云铺购代刷网系统全开源可运营程序搭建「建议收藏」

    云铺购代刷网系统全开源可运营程序搭建「建议收藏」云铺购最新代刷网系统无后门全开源可运营版本控制端功能支持一键通秒搭建代刷网站点,一键新增修改站点版本,支持QQ一键通登录自主添加站点域名管理站点,可配置后台安全访问域名白名单IP(实时保护)控制端支持一键备份旗下所有站点数据,共享数据版大大减少服务器压力主站点功能前后台支持QQ一键通登录,前台风格8套内页风格3套,免密支付,订单代付自定义网站公告导航,等级配置,邮箱配置,密匙配置,站点一键通装修支持一键通秒对接云铺购系统,玖伍系统,亿乐系统,各大卡盟系统,网商系统等对接商

    2022年8月12日
  • latex换行后(\\)如何继续缩进两格?「建议收藏」

    latex换行后(\\)如何继续缩进两格?「建议收藏」LaTeX中正常换行不要使用\,直接回bai车两下,即du在两段中间空一行,这样就会自动另zhi起一段并且缩dao进了。也可以在段落前面加上\par,例如\par第一段。\par第二段。就可以将它们分段了,如果想要在强制换行(\)之后缩进,可以使用\indent命令,例如第一行\\indent第二行…

    2022年5月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号