Python编写只允许实例化一个对象的类

>>> class T: __total = 0 def __init__(self, value): if T.__total != 0: raise Exception('You can only create one instanse') self.value = value T.__total += 1

>>> t1 = T(3)

# 实例化第二个对象时出错 >>> t2 = T(5) Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> t2 = T(5) File "<pyshell#6>", line 5, in __init__ raise Exception('You can only create one instanse') Exception: You can only create one instanse

但是,由于Python对私有数据成员没有提供严格的访问控制保护机制,所以上面的代码无法避免下面的情况。

>>> T._T__total = 0 >>> t2 = T(5) >>> T._T__total = 0 >>> t3 = T(8) >>> t1 <__main__.T object at 0x0000018771177FD0> >>> t2 <__main__.T object at 0x0000018771177F98> >>> t3 <__main__.T object at 0x00000187711F8F98>

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发 -- 分享 互助 成长

C/C++中static关键词的作用

1、在函数体内的static变量作用范围是该函数体,其只被内存分配一次,所以在下次调用的时候会保持上一次的值。 2、模块内的static全局变量可以被模块内的所...

1878
来自专栏开发技术

排序之简单选择排序

  本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中...

1102
来自专栏西枫里博客

Python学习笔记九(变量作用域及内置函数和闭包函数)

在上次的学习中,初步认识了Python的自定义函数方式及变量参数。那么编程中的局部变量和全局变量应该是大多数语言的标配。Python中如果定义局部变量和全局变量...

832
来自专栏指尖下的Android

JNI之路径初探---6

本篇文章讲解JNI下属性的内存释放问题,众所周知,JAVA有四大引用,1,强引用2,弱引用3,软引用4,虚引用。JNI有三大引用,1,普通全局引用2,弱全局引用...

922
来自专栏Java技术栈

一张图搞清楚Java异常机制

下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的。 ? Throwable Throwable是Java异常的顶级类,所有的异常...

2915
来自专栏swag code

多线程的实现方法

      从Thread类中实例化的对象即代表线程,启动一个线程就是建立一个Thread实例。因为完成线程真正功能的代码放在类的run()方法中,所以可以将线...

612
来自专栏JAVA技术站

shell学习五常用命令echo printf test

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:

923
来自专栏数据结构与算法

1750:全排列

1750:全排列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所...

37114
来自专栏zlmai的专栏

理解PHP的延迟静态绑定

static::中的static其实是运行时所在类的别名,并不是定义类时所在的那个类名。这个东西可以实现在父类中,能够调用子类的方法和属性。

2162
来自专栏Android机动车

java内部存储简述

在实际项目中,会涉及到很多大量数据的访问,存储或者是计算,这个时候如果可以用合适的容器来存储这些数据,就会达到事半功倍的效果,也就是说,当你的程序遇到瓶颈的时候...

1413

扫码关注云+社区

领取腾讯云代金券