导航:首页 > 编程语言 > python单例模式不初始化

python单例模式不初始化

发布时间:2022-05-27 10:39:30

python中init方法无法初始化,请大神赐教

首先你要明白类的三大特性,封装,继承,多态。你这个主要是封装得应用。实际图二也是错误的,无法获得url的值。图一的稍微改下就对了。
def __init__( self,url):
self. url= url
这样在对类引用的时候给url赋值就行了

② Python如何实现单例模式

有些时候你的项目中难免需要一些全局唯一的对象,这些对象大多是一些工具性的东西,在Python中实现单例模式并不是什么难事。以下总结几种方法:
使用类装饰器
使用装饰器实现单例类的时候,类本身并不知道自己是单例的,所以写代码的人可以不care这个,只要正常写自己的类的实现就可以,类的单例有装饰器保证。
def singleton(cls):
instances = {}
def _wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return _wrapper
你会发现singleton装饰器内部使用了一个dict。当然你也可以用其他的方式,不过以下的实现是错误的:
def singleton(cls):
_instance = None #外部作用域的引用对于嵌套的内部作用域是只读的
def _wrapper(*args, **kwargs):
if _instance is None: #解释器会抛出"UnboundLocalError: ...referenced before assignment"
_instance = cls(*args, **kwargs) #赋值行为使解释器将"_instance"看作局部变量
return _instance
return _wrapper
使用元类(__metaclass__)和可调用对象(__call__)
Python的对象系统中一些皆对象,类也不例外,可以称之为”类型对象”,比较绕,但仔细思考也不难:类本身也是一种对象,只不过这种对象很特殊,它表示某一种类型。是对象,那必然是实例化来的,那么谁实例化后是这种类型对象呢?也就是元类。
Python中,class关键字表示定义一个类对象,此时解释器会按一定规则寻找__metaclass__,如果找到了,就调用对应的元类实现来实例化该类对象;没找到,就会调用type元类来实例化该类对象。
__call__是Python的魔术方法,Python的面向对象是”Duck type”的,意味着对象的行为可以通过实现协议来实现,可以看作是一种特殊的接口形式。某个类实现了__call__方法意味着该类的对象是可调用的,可以想象函数调用的样子。再考虑一下foo=Foo()这种实例化的形式,是不是很像啊。结合元类的概念,可以看出,Foo类是单例的,则在调用Foo()的时候每次都返回了同样的对象。而Foo作为一个类对象是单例的,意味着它的类(即生成它的元类)是实现了__call__方法的。所以可以如下实现:
class Singleton(type):
def __init__(cls, name, bases, attrs):
super(Singleton, cls).__init__(name, bases, attrs)
cls._instance = None
def __call__(cls, *args, **kwargs):
if cls._instance is None
# 以下不要使用'cls._instance = cls(*args, **kwargs)', 防止死循环,
# cls的调用行为已经被当前'__call__'协议拦截了
# 使用super(Singleton, cls).__call__来生成cls的实例
cls._instance = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instance

class Foo(object): #单例类
__metaclass__ = Singleton

>>>a = Foo()
>>>b = Foo()
>>>a is b
>>>True
>>>a.x = 1
>>>b.x
>>>1
使用__new__
__init__不是Python对象的构造方法,__init__只负责初始化实例对象,在调用__init__方法之前,会首先调用__new__方法生成对象,可以认为__new__方法充当了构造方法的角色。所以可以在__new__中加以控制,使得某个类只生成唯一对象。具体实现时可以实现一个父类,重载__new__方法,单例类只需要继承这个父类就好。
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance

class Foo(Singleton): #单例类
a = 1

③ python 为啥没执行初始化方法

在对象创建得时候会调用初始化方法,你图上得代码是正确得,写的代码出错了,下面看一个简单得示例

代码:

classCar:
def__init__(self):
print("执行了初始化方法")
defrun(self):
print("车子运行起来了")


car=Car()
car.run()

运行结果:

④ 为什么我在prthon写print(“hello world"),会出现无法初始化设备 PRN

要先进入python,即先在命令行下输入python回车,进入python编辑模式。

这种报错还有一种情况是,当在DOS命令提示符下,运行“*.Py”文件的时候,如果之前使用编辑器编辑python的代码,有的编辑器会在文件开始的地方加上了几个特殊字符(UTF-8 BOM),结果导致程序运行出现错误。

另外还需要注意:python文件名只能是英文字母、数字和下划线的组合。

(4)python单例模式不初始化扩展阅读

Python可应用于多平台包括 Linux 和 Mac OS X。可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。

Python环境变量配置

程序和可执行文件可以在许多目录,而这些路径很可能不在操作系统提供可执行文件的搜索路径中。

path(路径)存储在环境变量中,这是由操作系统维护的一个命名的字符串。这些变量包含可用的命令行解释器和其他程序的信息。

Unix或Windows中路径变量为PATH(UNIX区分大小写,Windows不区分大小写)。

在Mac OS中,安装程序过程中改变了python的安装路径。如果用户需要在其他目录引用Python,则必须在path中添加Python目录。

⑤ 怎么理解python单例模式

在聊这之前我们首先要明确的是,单例模式在实际中的意义以及在python中具有实现的价值?

当前,相信有很多人支持单例模式,也有不少人反对,尤其是在python中,目前依旧具有很大的争议性。我们要在评论之前首先要了解单例模式

什么是单例模式?

顾名思义:就是单个模式

单例模式是一种常见的软件设置模式,在它的核心结构中只包含一个被称为单例类的特殊类,通过单例模式可以保证系统中的一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个对象只能存在一个,单例模式是最好的解决方案。

单例模式的要点有三类

⑥ Python 单例模式问题求助 图1和图2有什么区别吗没看出来

__new__方法才是用来创建对象的,__init__方法是对象创建完成后对对象进行初始化的,所以要实现单例模式应该重写__new__方法,重写__init__方法不能达到目的。

⑦ 单例模式中静态变量初始化与不初始化有什么区别

2.整个初始化顺序是 类变量,类方法(如:static { System.out.print("ddd");}),对象变量,对象方法(如:{ System.out.print("ddd");})。大概是这样,具体的记不清了,有兴趣看看书。不好意思,请问为什么counter2会被重新设置成0,而counter1不会?新手上路见笑了。 问题补充:watermud 写道你输出的结果,与 类和对象 的初始化顺序有关。

阅读全文

与python单例模式不初始化相关的资料

热点内容
ada编译成dll 浏览:470
单片机代码跳掉 浏览:447
程序员谈薪水压价 浏览:861
荣耀10青春版支持方舟编译啊 浏览:158
最优估计pdf 浏览:826
androiddrawtext字体 浏览:669
c语言源编辑源程序编译 浏览:821
手里捏东西真的可以解压吗 浏览:265
编译原理画状态表 浏览:28
用echo命令产生下列输出 浏览:360
在内网如何访问服务器 浏览:961
java导入oracle数据库 浏览:135
坚朗内开内倒铝条算法 浏览:259
华为阅读新建文件夹 浏览:770
幻塔如何选择服务器 浏览:221
解压先把文件压到系统盘 浏览:823
access压缩和修复数据库 浏览:791
光纤交换机命令 浏览:513
白色桌放什么文件夹 浏览:296
分治算法思想 浏览:151