python中init方法
A. python中init最多接收多少個參數
`__init__` 方法可以接收任意數量的參數,因為它可以使用不定長的參數列表和關鍵字參數。使用`*args`和`**kwargs` 可以實現不同類鉛搏型型和數量的參數傳遞。例如:
```
class Car:
def __init__(self, model, year, *args, **kwargs):
self.model = model
self.year = year
self.additional_features = args
self.additional_specifications = kwargs
```
在這個例子中, `*args` 表示接收位置參槐猜數, `**kwargs` 表示接收關鍵字參數。由於這兩個參數都是不銀肢限定數量的,所以 `__init__` 方法可以接收任意數量的參數。
B. python中init方法中定義的__metaclass__=xxx的作用
__metaclass__是Python2的寫法,代表指定該類的元類。Python3中對應的寫法是class 要定義的類名(metaclass=元類名)
元類是生成類的工廠,就像類是生成對象實例的工廠。在Python中所有類的默認元類是type,如果需要自定義類的生成方式,例如給類添加特定的屬性,那麼就需要替換默認元類為你自己編寫的元類,此時就要用到metaclass語法。一個重要的利用場景就是ORM框架,因為資料庫模型類的編寫者是無法預知這個類可能有哪些欄位的,所以必須要利用元類動態地生成這個類。
關於元類的說明可以看:網頁鏈接
C. python中的__init__(self)是什麼意思呢
Python中,__init__()方法是所謂的對象的「構造函數」,負責在對象初始化時進行一系列的構建操作
假設有如下類:
classworker:
pass
在Python中,對某個類實例進行成員賦值,可以創建不存在的成員:
>>>a=worker()
>>>a.pay=55000
>>>a.name='Bob'
如果對於每一個worker類的實例對象,都要進行如此賦值的話,這個類會變得很難使用
另外,對於用於特殊場合的類,可能要求在對象創建時,進行連接資料庫、連接FTP伺服器、進行API驗證等操作,這些初始化操作,都可以封裝在__init__()方法中進行
__init__方法使用如下規則定義:
classex:
def__init__(self):
pass
__init__方法必須接受至少一個參數即self,Python中,self是指向該對象本身的一個引用,通過在類的內部使用self變數,類中的方法可以訪問自己的成員變數,簡單來說,self.varname的意義為」訪問該對象的varname屬性「
當然,__init__()中可以封裝任意的程序邏輯,這是允許的,__init__()方法還接受任意多個其他參數,允許在初始化時提供一些數據,例如,對於剛剛的worker類,可以這樣寫:
classworker:
def__init__(self,name,pay):
self.name=name
self.pay=pay
這樣,在創建worker類的對象時,必須提供name和pay兩個參數:
>>>b=worker('Jim',5000)
Python會自動調用worker.__init__()方法,並傳遞參數。
通常情況下,self形參由Python自動賦值,但是,在類繼承中,並不是這樣
例如,Python的HTML處理工具HTMLParser,是一個基於OOP模型的工具,要使用該工具,必須編寫一個類,繼承html.parser.HTMLParser類,並重載一系列方法,以定製自己的功能
fromhtml.parser.HTMLParser
classex2(HTMLParser):
def__init__(self):
HTMLParser.__init__(self)
此處,需要調用了HTMLParser類的__init__方法,而且,此處手動給HTMLParser.__init__()方法的self形參賦值,事實上,如果不顯式指定self形參的值,Python不會在此處自動為HTMLParser.__init__()方法的self形參進行賦值
如此設計的原因是,在子類中需要獲得超類的成員和方法,而通過在子類的__init__方法中調用超類的__init__方法,並手動給它傳遞指向子類的self值,可以使超類的__init__方法將所初始化的變數設置成子類的變數,這樣,就可以在子類中直接訪問超類的變數了。
D. python super().init()作用
對於python里的super(). init ()有什麼作用,很多同遲余學沒有弄清楚。
直白的說super(). init (),就是繼承父類的init方法,同樣可以使用super()點 其他方法名,去繼承其他方法。
下面通過三個不同的繼承猜侍並碼兆滾調用,對比他們的區別,搞清楚super(). init ()的用途。
文章摘自: https://blog.csdn.net/a__int__/article/details/104600972
E. 關於python的實例方法問題
題主你好,
python中創建新實例的時候, 如果相應的類中定義了__init__()方法的話, 會自動調用這個方法. 你可能認為名稱"init"和"__init__"差不多, 但計算機其實是個很笨的東西, 它會完全按照設計去執行. 也就是說,在設計的時候就已經定死了, 默認情況下, 創建新實例的時候, 會自動調用類中定義的__init__()方法, 只要你的方法名和__init__有一點不一樣也不行.
下圖是我在官網上找的關於__init__()調用的簡單說明:
高亮部分說的大概意思就是上面講的,如果相應類中定義了__init__()方法,則在創建該類實例的時候會自動調用裡面定義的__init__()方法.
-----
希望可以幫到題主, 歡迎追問.
F. 詳解Python中的__new__、__init__、__call__三個特殊方法
__new__: 對象的創建,是一個靜態方法,第一個參數是cls。(想想也是,不可能是self,對象還沒創建,哪來的self)
__init__ : 對象的旦胡初始化, 是一個實例方法,第一個參數是self。
__call__ : 對象可call,注意不是類,是對象。
先有創建,才有初始化。即先__new__,而後__init__。
上面說的不好理解,看例子。
1.對於__new__
可以看到,輸出來是一個Bar對象。
__new__方法在類定義中不是必須寫的,如果沒定義,默認會調用object.__new__去創建一個對象。如果定義了,就是override,可以custom創建對象的行為。
聰明的讀者可能想到,既然__new__可以custom對象的創建,那我在這里做一下手腳,每次創建對象都返回同一個,那不就是單例模式了嗎?沒錯,就是這樣。可以觀摩《飄逸的模培攔python - 單例中返模式亂彈》
定義單例模式時,因為自定義的__new__重載了父類的__new__,所以要自己顯式調用父類的__new__,即object.__new__(cls, *args, **kwargs),或者用super()。,不然就不是extend原來的實例了,而是替換原來的實例。
2.對於__init__
使用Python寫過面向對象的代碼的同學,可能對 __init__ 方法已經非常熟悉了,__init__ 方法通常用在初始化一個類實例的時候。例如:
這樣便是__init__最普通的用法了。但__init__其實不是實例化一個類的時候第一個被調用 的方法。當使用 Persion(name, age) 這樣的表達式來實例化一個類時,最先被調用的方法 其實是 __new__ 方法。
3.對於__call__
對象通過提供__call__(slef, [,*args [,**kwargs]])方法可以模擬函數的行為,如果一個對象x提供了該方法,就可以像函數一樣使用它,也就是說x(arg1, arg2...) 等同於調用x.__call__(self, arg1, arg2) 。模擬函數的對象可以用於創建防函數(functor) 或代理(proxy).
總結,在Python中,類的行為就是這樣,__new__、__init__、__call__等方法不是必須寫的,會默認調用,如果自己定義了,就是override,可以custom。既然override了,通常也會顯式調用進行補償以達到extend的目的。
這也是為什麼會出現"明明定義def _init__(self, *args, **kwargs),對象怎麼不進行初始化"這種看起來詭異的行為。(注,這里_init__少寫了個下劃線,因為__init__不是必須寫的,所以這里不會報錯,而是當做一個新的方法_init__)
G. python中init方法無法初始化,請大神賜教
首先你要明白類的三大特性,封裝,繼承,多態。你這個主要是封裝得應用。實際圖二也是錯誤的,無法獲得url的值。圖一的稍微改下就對了。
def __init__( self,url):
self. url= url
這樣在對類引用的時候給url賦值就行了
H. python 構造器
1.類的構造函數,用於初始化類成員等,只能用 init ,不能換其他名字
2. init 方法的意義: init 方法在類的一個對象被建立時,馬上運行。
def init (self, name):
xxxxxxxxxx
3.類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱,但是在調用這個方法的時候你不為這個參數賦值,Python會提供這個值。這個特別的變數指對象本身,按照慣例它的名稱是self。
4. init 不是構造函數,Python對象在調用 init 的時候已被構造出來,稱為「初始化」比較合適。
5.如果子類的方法覆蓋了父類,想調用父類的方法怎麼辦?
Python沒有super,很簡單,直接「父類名.方法」即可。
I. python中['initialize']啥意思
python中['initialize']的意思是悉巧初始化方法。在Python的類中,有一種特殊的方法——初始化方法。它的格式是def__init__(self):,方法名由init(initialize的縮寫,初始化的意思)加左右兩邊的洞輪雙睜顫鍵下劃線組成。
J. python中的__init__()是什麼意思呢
python中的__init__()時類的初始化函數,比如:
classObj:
def__init__():
print1
obj=Obj()#這時候調用__init__這個方法
如果解決了您的問題請採納!
如果未解決請繼續追問