鱼C论坛

 找回密码
 立即注册
查看: 952|回复: 5

[已解决]关于python 单例的一些问题

[复制链接]
发表于 2018-3-21 19:20:36 | 显示全部楼层 |阅读模式
10鱼币
下面是我写的代码,但是为什么第一次运行时会报错,第二次运行就又得到我想要的结果了.
import random
class R():
    __x = None
    def __new__(cls):
        if cls.__x == None:
            cls.__x = super().__new__(cls)
        else:
            return cls.__x
      
    def __init__(self):
        self.rdom = ''
        for i in range(4):
            self.rdom += str(random.randint(0,9))
           
    def show(self):
        print(self.rdom)

这个代码目的时生成一个4位的随机数.运行结果如图...
第一次声明后,无法调用.rdom属性,但是在原程序的基础上,再声明一次后,程序正常运行.
想请教这是为什么,以及如何修改.

PS.额外的问一下关于上面  super().__new__(cls) 如何理解这句话,以及为何要传入cls参数.
最佳答案
2018-3-21 19:20:37
__x = None
    def __new__(cls):
        if cls.__x == None:

_x你想做什么用
TIM截图20180321191703.png

最佳答案

查看完整内容

__x = None def __new__(cls): if cls.__x == None: _x你想做什么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-21 19:20:37 | 显示全部楼层    本楼为最佳答案   
__x = None
    def __new__(cls):
        if cls.__x == None:

_x你想做什么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-21 19:43:16 | 显示全部楼层
    __x = None
    def __new__(cls):
        if cls.__x == None:
            cls.__x = super().__new__(cls)
        else:
            return cls.__x
问题肯定是上面引起了。代码不知道你是怎么写出来的。
还有一点
class R():
class R:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-21 19:48:20 | 显示全部楼层
ba21 发表于 2018-3-21 19:43
__x = None
    def __new__(cls):
        if cls.__x == None:

按照单利的格式写出来的啊..但是却要实例化两次..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-21 20:12:02 | 显示全部楼层
已经知道答案了...把else删除就好了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-22 10:27:35 | 显示全部楼层
塔利班 发表于 2018-3-21 20:46
__x = None
    def __new__(cls):
        if cls.__x == None:

实现单例,这个变量x是否私有化不是重点...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 00:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表