python的init方法
❶ python為什麼要有一個init函數 知乎
__init__()是為了做初始化用的
我們初始化得時候不一定要使用__init__()進行初始化,可以直接定義
比如
classtest(self):
test_a="123"
這里就初始話了一個變數test_a = "123",但這樣就太固定
而__init__()的好處在於它可以接收參數並初始化
__init__(self,testa):
test_a = testa
這樣類就可以初始化話一個動態的變數,更加靈活
而且直接test("123")就將test_a 初始成123了
❷ python裡面 init的用法
類的構造函數,用於初始化類成員等,只能用__init__
,不能換其他名字
設有個類myclass,
相當於c++,java裡面的
myclass()
❸ python每一個類都有一個init方法么
這個是用於初始化的,__init__這種前後都是兩個下劃線的,這個是python類內建的方法
還有__str__,__call__等等,很多的
❹ python init函數
問:對於python中的初始化init這個怎麼理解啊?
答:相當於類的構造函數,用來初始化變數等。
問: param = self._args['receiving'].replace("\'", "'")這一句是啥意思啊?還有addReceiving(self)中self到底是什麼啊?
答:在對class進行調用的過程中,會首先執行__init__這個構造函數,可以看到在構造函數中,對_args進行了賦值,在python中"_"一般代表這個參數是private的。
問:我的理解是args是LogisticsService類的一個屬性,addReceiving(self)方法中的參數self就是LogisticsService類中的args。求大神指導!!
答:大神來了,args是一個字典類型,是LogisticsService的在init初始化的一個欄位。
大神做到底,再給你個示例,你琢磨一下
❺ python中init方法中定義的__metaclass__=xxx的作用
__metaclass__是Python2的寫法,代表指定該類的元類。Python3中對應的寫法是class 要定義的類名(metaclass=元類名)
元類是生成類的工廠,就像類是生成對象實例的工廠。在Python中所有類的默認元類是type,如果需要自定義類的生成方式,例如給類添加特定的屬性,那麼就需要替換默認元類為你自己編寫的元類,此時就要用到metaclass語法。一個重要的利用場景就是ORM框架,因為資料庫模型類的編寫者是無法預知這個類可能有哪些欄位的,所以必須要利用元類動態地生成這個類。
關於元類的說明可以看:網頁鏈接
❻ python init和new的區別
類裡面的__init__()方法是在類被實例化是自動調用的方法,可以在裡面進行一些初始化操作
❼ python中的__init__()是什麼意思呢
python中的__init__()時類的初始化函數,比如:
classObj:
def__init__():
print1
obj=Obj()#這時候調用__init__這個方法
如果解決了您的問題請採納!
如果未解決請繼續追問
❽ python中__init__()括弧裡面的變數應該如何寫,分別表示什麼
__init__(self)相當於其它語言中的構造函數,用於在實例的時候給當前類的實例成員初始化用的,那個self關鍵字用於引用該類當前本身這個實例用的,如果想在創建實例的時候,多做一些初始化值的操作,則可以在self後面多加一些參數!比如:
#類描述學生
class Student:
def __init__(self,name,age): #構造實例時將參數值傳遞給當前那個實例的成員
self.name=name
self.age=age
s = Student('tom',20) #此時執行的就是__init__(self,name,age)
print(s.name)
print(s.age)
------------------
tom
20
❾ Python中的init.py有什麼作用
你指的應該是是__init__.py文件,以下下詳細解釋:
__init__.py該文件的作用就是相當於把自身整個文件夾當作一個包來管理,每當有外部import的時候,就會自動執行裡面的函數。
它具有以下幾個作用:
1. 標識該目錄是一個python的模塊包(mole package)
如果你是使用python的相關IDE來進行開發,那麼如果目錄中存在該文件,該目錄就會被識別為 mole package 。
2. 簡化模塊導入操作
假設我們的模塊包的目錄結構如下:
.
└── mypackage
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py
如果我們使用最直接的導入方式,將整個文件拷貝到工程目錄下,然後直接導入:
from mypackage.subpackage_1 import test11
from mypackage.subpackage_1 import test12
from mypackage.subpackage_2 import test21
from mypackage.subpackage_2 import test22
from mypackage.subpackage_3 import test31
from mypackage.subpackage_3 import test32
這樣的話,看起來就會很麻煩,查找的時候也會麻煩,此時__init__.py就起到了簡化的作用。
2.1init.py 是怎麼工作的?
實際上,如果目錄中包含了__init__.py時,當用 import 導入該目錄時,會執行__init__.py裡面的代碼。我們在mypackage目錄下增加一個__ init __.py文件來做一個實驗:
.
└── mypackage
├── __init__.py
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py
mypackage/__init__.py裡面加一個print,如果執行了該文件就會輸出
print("You have imported mypackage")
下面直接用交互模式進行 import
>>> import mypackage
You have imported mypackage
很顯然,__init__.py在包被導入時會被執行。
2.2 控制模塊導入
我們再做一個實驗,在 mypackage/init.py 添加以下語句:
from subpackage_1 import test11
我們導入 mypackage 試試:
>>> import mypackageTraceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/home/taopeng/Workspace/Test/mypackage/__init__.py", line 2, in <mole>
from subpackage_1 import test11ImportError: No mole named 'subpackage_1'
報錯了。。。怎麼回事?
原來,在我們執行import時,當前目錄是不會變的(就算是執行子目錄的文件),還是需要完整的包名。
from mypackage.subpackage_1 import test11
綜上,我們可以在init.py 指定默認需要導入的模塊
2.3 偷懶的導入方法
有時候我們在做導入時會偷懶,將包中的所有內容導入
from mypackage import *
這是怎麼實現的呢?__all__變數就是干這個工作的。
__all__關聯了一個模塊列表,當執行from xx import *時,就會導入列表中的模塊。我們將__init__.py修改為 :
__all__ = ['subpackage_1', 'subpackage_2']
這里沒有包含subpackage_3,是為了證明__all__起作用了,而不是導入了所有子目錄。
>>> from mypackage import *
>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']
>>>
>>> dir(subpackage_1)['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
子目錄的中的模塊沒有導入!!!
該例子中的導入等價於:from mypackage import subpackage_1, subpackage_2
因此,導入操作會繼續查找 subpackage_1 和 subpackage_2 中的__init__.py並執行。(但是此時不會執行 import *)
我們在 subpackage_1 下添加__init__.py文件:
__all__ = ['test11', 'test12']# 默認只導入test11
from mypackage.subpackage_1 import test11
再來導入試試
>>> from mypackage import *
>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']
>>>
>>> dir(subpackage_1)['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'test11']
如果想要導入子包的所有模塊,則需要更精確指定。
>>> from mypackage.subpackage_1 import *
>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'test11', 'test12']
3. 配置模塊的初始化操作
在了解了__init__.py的工作原理後,應該能理解該文件就是一個正常的python代碼文件。
因此可以將初始化代碼放入該文件中。
❿ python中init方法無法初始化,請大神賜教
首先你要明白類的三大特性,封裝,繼承,多態。你這個主要是封裝得應用。實際圖二也是錯誤的,無法獲得url的值。圖一的稍微改下就對了。
def __init__( self,url):
self. url= url
這樣在對類引用的時候給url賦值就行了