python面试的100题(9)

17.python如何实现单例模式?请写出两种实现方式?

第一种方法:使用装饰器

def singleton(cls):
    instances = {}
    def wrapper(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return wrapper
@singleton
class Foo(object):
    pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2 )#True

第二种方法:使用基类 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):
    pass

foo1 = Foo()
foo2 = Foo()

print(foo1 is foo2) #True

第三种方法:元类,元类是用于创建类对象的类,类对象创建实例对象时一定要调用call方法,因此在调用call时候保证始终只创建一个实例即可,type是python的元类

class Singleton(type):
    def __call__(cls,*args,**kwargs):
        if not hasattr(cls,‘_instance‘):
            cls._instance = super(Singleton,cls).__call__(*args,**kwargs)
        return cls._instance
class Foo(object):
    __metaclass__ = Singleton

foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2) #True

原文地址:https://www.cnblogs.com/Fiona-Y/p/10569800.html

时间: 2024-10-12 09:14:03

python面试的100题(9)的相关文章

python面试的100题(21)

正则表达式 94.请写出一段代码用正则匹配出ip? ip地址的生成规则. IP地址,是由32位数字二进制转为四个十进制的字符串组成. 怎么转化?下面讲解: 二进制:11111111111111111111111111111111 分为四部分:11111111.11111111.11111111.11111111 转化:2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=255 转为十进制范围:0~255.0~255.0~255.0~255 这就是IP地址的范围. 根据这个生成IP的规

python面试的100题(15)

41.super函数的具体用法和场景 为了调用父类(超类)的一个方法,可以使用 super() 函数,比如: class A: def spam(self): print('A.spam') class B(A): def spam(self): print('B.spam') super().spam() # Call parent spam() super() 函数的一个常见用法是在 __init__() 方法中确保父类被正确的初始化了: class A: def __init__(self

python面试的100题(18)

函数 52.python常见的列表推导式? 列表推导式书写形式: [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件] 参考地址:https://www.cnblogs.com/yupeng/p/3428556.html 53.简述read.readline.readlines的区别? (1) read(size):按字节从头读到最后,返回的是一个字符串类型,其中参数size是表示读取的字节数,size的默认是读取全部. (2) readline() :每

python面试的100题(7)

8.将字符串 "k:1 |k1:2|k2:3|k3:4",处理成字典 {k:1,k1:2,...} str1 = "k:1|k1:2|k2:3|k3:4" def str2dict(str1): dict1 = {} for iterms in str1.split('|'): key,value = iterms.split(':') dict1[key] = value return dict1 #字典推导式 d = {k:int(v) for t in str

LeetCode面试常见100题( TOP 100 Liked Questions)

LeetCode面试常见100题( TOP 100 Liked Questions) 置顶 2018年07月16日 11:25:22 lanyu_01 阅读数 9704更多 分类专栏: 面试编程题真题合集 常见算法问题 LeetCode试题 LeetCode常见试题 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lanyu_01/article/details/81062232 这篇文章

python面试的315题

copy自武sir的博客,如有疑问请联系武sir 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? Python解释器种类以及特点? 位和字节的关系? b.B.KB.MB.GB 的关系? 请至少列举5个 PEP8 规范(越多越好). 通过代码实现如下转换: 二进制转换成十进制:v = “0b1111011”?十进制转换成二进制:v = 18? 八进制

python练习集100题(1-20)

题目1:有1.2.3.4四个数,能组成多少个互不相同且无重复的三位数?都是多少? list_num=[1,2,3,4] all_num=[] for i in list_num:     for j in list_num:         for k in list_num :             if (i!=j) and (i!=k) and (j!=k):                 num=i*100+j*10+k                 all_num.append(

python自测100题,来看看你和月薪3万的差距(含答案)

-------------人生苦短,必须性感! 1.为什么学习Python? 人生苦短?人间不值得?想想自己的初心吧! 2.通过什么途径学习的Python? 官网.网上视频.学习网站.论坛.大牛的辅导 3.Python和Java.PHP.C.C#.C++等其他语言的对比? (1).python代码,简介,明确,优雅,简单易懂(2).开发效率高(3).可扩展性强 4.简述解释型和编译型编程语言? 解释型:在执行程序时,计算机才一条一条的将代码解释成机器语言给计算机来执行编译型:是把源程序的每一条语

python练习集100题(21-40)

题目21:两个乒乓球队进行比赛,各出3人.甲队为a,b,c三人,乙队为x,y,z三人.以抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x.z比,请编程找出三队比赛名单. first_list=['x','y','z'] for i in first_list:        #i是a的对手,j是b的对手,k是c的对手     for j in first_list:         if(j!=i):                        for k in fir