91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python不同版本中的_new_有什么區別

發布時間:2020-12-10 15:46:55 來源:億速云 閱讀:205 作者:Leah 欄目:開發技術

python不同版本中的_new_有什么區別?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

new方法接受的參數雖然也是和init一樣,但init是在類實例創建之后調用,而 new方法正是創建這個類實例的方法。

class Person(object):
  """Silly Person"""
  def __new__(cls, name, age):
    print '__new__ called.'
    return super(Person, cls).__new__(cls, name, age)
  def __init__(self, name, age):
    print '__init__ called.'
    self.name = name
    self.age = age
  def __str__(self):
    return '<Person: %s(%s)>' % (self.name, self.age)
if __name__ == '__main__':
  piglei = Person('piglei', 24)
print piglei

Python3和 Python2中__new__使用不同

Python3的寫法

class Singleton(object):
  def __new__(cls,*args, **kwargs):
    if not hasattr(cls,'_inst'):
      print(cls)
      cls._inst = super(Singleton, cls).__new__(cls)
    return cls._inst

如果Python3的寫法跟Python2寫法一樣,那么倒數第二行會報錯

"TypeError: object() takes no parameters"

根據上面的運行結果我們可以發現,在python3中強行使用python2的寫法是不可行的。

Python __new__()知識點擴充

__new__() 是一種負責創建類實例的靜態方法,它無需使用 staticmethod 裝飾器修飾,且該方法會優先 __init__() 初始化方法被調用。

一般情況下,覆寫 __new__() 的實現將會使用合適的參數調用其超類的 super().__new__(),并在返回之前修改實例。例如:

class demoClass:
  instances_created = 0
  def __new__(cls,*args,**kwargs):
    print("__new__():",cls,args,kwargs)
    instance = super().__new__(cls)
    instance.number = cls.instances_created
    cls.instances_created += 1
    return instance
  def __init__(self,attribute):
    print("__init__():",self,attribute)
    self.attribute = attribute
test1 = demoClass("abc")
test2 = demoClass("xyz")
print(test1.number,test1.instances_created)
print(test2.number,test2.instances_created)

輸出結果為

__new__(): <class '__main__.demoClass'> ('abc',) {}
__init__(): <__main__.demoClass object at 0x0000026FC0DF8080> abc
__new__(): <class '__main__.demoClass'> ('xyz',) {}
__init__(): <__main__.demoClass object at 0x0000026FC0DED358> xyz
0 2
1 2

關于python不同版本中的_new_有什么區別問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

垦利县| 平利县| 岢岚县| 炎陵县| 宜都市| 乐安县| 龙井市| 常德市| 广宗县| 福鼎市| 唐海县| 启东市| 黔江区| 敦煌市| 任丘市| 土默特右旗| 司法| 根河市| 云和县| 翁源县| 麻栗坡县| 肥城市| 丰城市| 雷州市| 邵东县| 黄浦区| 乌兰浩特市| 木兰县| 霍州市| 赤水市| 杭锦旗| 布拖县| 通州市| 宁陕县| 包头市| 华蓥市| 睢宁县| 阳东县| 彩票| 大洼县| 新蔡县|