日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python singleton design pattern super() 多继承

發(fā)布時(shí)間:2024/1/17 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python singleton design pattern super() 多继承 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python ?singleton design pattern?

  • ?decorate

  • ?baseclass

  • ?metaclass

  • ?import module

  • super()

  • 一、A decorator

    def singleton(class_):instances = {}def getinstance(*args, **kwargs):if class_ not in instances:instances[class_] = class_(*args, **kwargs)return instances[class_]return getinstance@singleton class MyClass(BaseClass):pass

    當(dāng)用MyClass() 去創(chuàng)建一個(gè)對(duì)象時(shí)這個(gè)對(duì)象將會(huì)是單例的。MyClass 本身已經(jīng)是一個(gè)函數(shù)。不是一個(gè)類,所以你不能通過(guò)它來(lái)調(diào)用類的方法。所以對(duì)于

    m=MyClass() n = MyClass() ?o=type(n)() ? m==n and m!=o and n != o ?將會(huì)是True

    ?

    二、baseclass

    class Singleton(object):_instance = Nonedef __new__(class_, *args, **kwargs):if not isinstance(class_._instance, class_):# class_._instance = object.__new__(class_) 這行語(yǔ)句和下一行語(yǔ)句作用一樣的class_._instance=super(Singleton,class_).__new__(class_)return class_._instance class MyClass(Singleton):def __init__(self,name):self.name = nameprint(name)

    ?

    pros ?

      是真的類

    cons:

    在多繼承的時(shí)候要注意

    三、metaclass

    class Singleton(type):_instances = {}def __call__(cls, *args, **kwargs):if cls not in cls._instances:cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)return cls._instances[cls]#Python2 class MyClass(BaseClass):__metaclass__ = Singleton#Python3 class MyClass(BaseClass, metaclass=Singleton):pass

    ?

    Pros

    • It's a true class
    • Auto-magically covers inheritance
    • Uses?__metaclass__?for its proper purpose (and made me aware of it)

    ?

    四、通過(guò)導(dǎo)入模塊

    ?

    ?

    ?


    ?

    五、

    super(type[,object or type])

    ?

    If the second argument is omitted, the super object returned is unbound. If the second argument is an object,?isinstance(obj,?type)?must be true.

    If the second argument is a type,?issubclass(type2,?type)?must be true (this is useful for classmethods).

    ?

    ?

    note :super() ?只能用于新式類

    鏈接?https://rhettinger.wordpress.com/2011/05/26/super-considered-super/

    ?

    多繼承,在python3 中全部都是新式類

    新式類的繼承順序是廣度優(yōu)先,python2 中的經(jīng)典類是深度優(yōu)先

    通過(guò)一個(gè)例子來(lái)理解

    class A(object):def f1(self):print('a.f1')class B(A):def f2(self):print('b.f1')class F(object):def f1(self):print('f.f1')class C(B,F):def f3(self):print('c.f1')insta = C() insta.f1()

    ?

    關(guān)系圖

    ? ? ? ??

    ?

    ?將會(huì)打印出a.f1

    如果代碼改為

    class A(object):def f1(self):print('a.f1')class B(A):def f2(self):print('b.f1')class F(A):def f1(self):print('f.f1')class C(B,F):def f3(self):print('c.f1')insta = C() insta.f1()

    ?

    ?關(guān)系圖如下:

    ?

    ?運(yùn)行結(jié)果是f.f1

    ?

    ?


    ?

    python 2 代碼如下

    class A: #經(jīng)典類
    ??? def foo(self):
    ??????? print'A'
    class B(A):

    ??? def foo(self):
    ??????? print'B'
    class C(A):
    ??? pass
    ??? #def foo(self):
    ???? #?? print'C'
    class D(B):
    ??? #def foo(self):
    ???? #?? print 'D'
    ??? pass

    class F(B):
    ??? #pass
    ??? def foo(self):
    ??????? print 'F'
    ??????? pass

    class G(D,F):
    ??? pass
    g1=G()
    g1.foo() #打印出 B

    ?

    ?

    ?


    python 3 代碼

    class A(object):def f1(self):print('a.f1')class B(A):pass def f1(self):print('b.f1')class C(A):def f1(self):print('c.f1')class D(B):pass# def f1(self):# print('D.f1')class F(B):passdef f1(self):print('f.f1')class G(D,F):# def f1(self):# print('g.f1')passinsta = G() insta.f1() #打印出f.f1

    ?

    ?

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/yuyang26/p/7717571.html

    總結(jié)

    以上是生活随笔為你收集整理的python singleton design pattern super() 多继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。