不同的子類物件,呼叫相同的父類方法,產生了不同的執行結果
關鍵字: 繼承 , 改寫
2.1__ new __ 魔術方法
觸發時機:例項化類生成物件的時候觸發(觸發時機在__ init __之前)
功能:控制物件的建立過程
引數:至少乙個cls接受當前的類,其他根據情況決定
返回值:通常返回物件或none
1.基本語法
2.new方法的觸發時機要快於initclass myclass1(object):
def __new__(cls):
print(cls)
# (1)借助父類object 類.方法()
# obj = object.__new__(cls)
# 返回本類自己的物件
# return obj
# (2)返回其他類的物件
# return obj
# (3)不返回任何物件
return none
obj = myclass1()
print(obj)
# print(obj.a)
new 用來建立物件
init 用來初始化物件(前提是有物件)
先建立物件,再去初始化物件,所以new快於init
3 . new方法的引數要和init方法一一對應class boat():
def __init__(self):
print(2)
def __new__(cls):
print(1)
return object.__new__(cls)
obj = boat()
# 列印
12
乙個引數
多個引數(new可以用*args,**kwargs來收集引數)class boat():
def __new__(cls,name):
return object.__new__(cls)
def __init__(self,name):
self.name = name
obj = boat("鐵達尼號")
print(obj.name)
4.注意點class boat():
def __new__(cls,*args,**kwargs):
return object.__new__(cls)
def __init__(self,name,a,b,c,d,e):
self.name = name
obj = boat("鐵達尼號",2,3,4,5,6)
print(obj.name)
如果new返回的不是本類的物件,則不會觸發init構造方法
無論例項化多少次,都有且只有乙個物件class myclass():
a = 1
other_obj = myclass()
class boat():
def __new__(cls):
return other_obj
def __init__(self):
print("構造方法被觸發~")
obj = boat()
# 列印 啥也沒有 new返回的是其他類的物件 不觸發init
目的意義:為了節省記憶體空間,僅僅是為了呼叫類中的成員的話,不需要額外給該物件新增任何成員,在這個場景中應使用單態,比如運算元據庫的增刪改差這樣的類.
1.基本語法
2.單態模式 + 構造方法class singleton():
__obj = none
def __new__(cls):
if cls.__obj is none:
cls.__obj = object.__new__(cls)
return cls.__obj
"""<__main__.singleton object at 0x000001fb3f207278>
有這個物件直接返回,沒這個物件,就給你建立,保證只有乙個
第一次例項化時,if cls.__obj is none 條件為真 , 建立乙個物件放到cls.__obj , 最後返回
第二次例項化時,if cls.__obj is none 條件為假 , 直接返回
第三次例項化時,if cls.__obj is none 條件為假 , 直接返回
第三次例項化時,if cls.__obj is none 條件為假 , 直接返回
"""obj1 = singleton()
print(obj1)
obj2 = singleton()
print(obj2)
obj3 = singleton()
print(obj3)
obj4 = singleton()
print(obj4)
obj1 obj2 obj3 obj4 都是同乙個物件
class singleton():
__obj = none
def __new__(cls,*args,**kwargs):
if cls.__obj is none:
cls.__obj = object.__new__(cls)
return cls.__obj
def __init__(self,name):
self.name = name
obj1 = singleton("王振")
obj2 = singleton("劉偉")
print(obj1.name)
print(obj2.name)
#全是劉偉
obj1 = singleton("王振") self.name = "王振"
obj2 = singleton("劉偉") self.name = "劉偉"
obj1 和 obj2 都是同時指向同乙個物件,因為物件只建立了乙個
物件.name 是獲取他後邊劉偉那個值,是同乙個值列印了2次;
第22天學習打卡
即同一方法可以根據傳送物件的不同而採用多種不同的行為方式。乙個物件的實際型別是確定的,但可以指向物件的引用型別有很多。引用一般指 父類,有關係的類 有繼承關係 子類重寫父類方法 父類引用指向子類物件 instanceof 型別轉換,引用型別轉換 判斷乙個物件是什麼型別package com.oop....
11月22號學習 第20天
1 把所有的資料型別的長度 意思 讀法 全部學會明天驗收 2 在users表裡建立乙個索引 索引有什麼好處有什麼壞處 alter table users add index user name 建立索引 索引的好處 索引的好處就是可以在眾多的資訊中用最快的速度的找到你所需要的資訊並且可以自動為我進行...
第18月第22天 機器學習first
1.網易公開課 機器學習 2.傳統的機器學習 機器學習 ml 技術在 中發揮了重要的作用,ml經歷了多代的發展,形成了具有豐富的模型結構,例如 1.線性回歸。2.邏輯回歸。3.決策樹。4.支援向量機。5.貝葉斯模型。6.正則化模型。7.模型整合 ensemble 8.神經網路。在大資料時代,雲計算和...