簡體   English   中英

Python類__init__確認

[英]Python Class __init__ Confirmation

我試圖了解Python類。 我對定義__init__有點困惑。 如果我創建了4個函數,則所有函數都將使用各種輸入變量。 我是否必須在__init__分配每個變量?

 class Thing:
     def __init__(self, arguments, name, address, phone_number, other):
         self.arguments = arguments
         self.name = name
         self.address = address
         self.phone_number = phone_number
         self.other = other

     def First(self, name):
         print self.name

     def Arguments(self, arguments):
         print self.arguments

     def Address(self, address, phone_number):
         print self.address + str(self.phone_number)

     def Other(self, other):
         print self.other

上面的內容已完全構成,因此請原諒其毫無意義(可以說它的目的是說明我的問題,所以請猜測其並非毫無意義)。

毫無疑問,出於某種原因,我會因為這個問題而降低評分,但是我一直在閱讀各種書籍(《學習Python的艱難之路》,《 Python適用於初學者》)並在線閱讀了各種教程,但它們都沒有真正確認“您必須添加init函數中的每個變量”。 因此,任何對__init__的了解會有所幫助。

首先: __init__()函數的特殊之處在於在創建類的新實例時會為您調用__init__()函數。 除此之外,它是一個與其他任何函數一樣的函數,您甚至可以根據需要手動調用它。

然后:您可以隨意將參數傳遞給函數。 通常,傳遞給__init__()的參數存儲在正在初始化的對象( self )內部。 有時,它們會以其他方式使用,然后將結果存儲在self ,例如傳遞主機名並使用該名稱創建套接字-然后只存儲套接字。 盡管您不必對參數做任何事情,但是可以像在First()函數中一樣忽略它們,該函數接收一個被忽略的參數name 請注意,此參數name和相似的屬性self.name是不同的!

筆記:

  • 但是,忽略傳遞給__init__()參數並不常見,就像通常忽略參數一樣。 在某些情況下,它們是“保留的”,因此派生類可以使用它們,但是通常它們是意料之外的(我猜想與您的First()函數一樣)。
  • 請查看PEP8,這是一種樣式指南。 堅持下去將使其他人更容易閱讀您的代碼。 例如, First()應該是first()
  • 升級到Python3。我認為如今沒有任何借口可以學​​習Python 2,除了維護一般使用Python 2之外,沒有其他借口。

如果變量在邏輯上連接到對象本身,則最好在構造函數中進行設置:

class Student:

    def __init__(self, name):
        self.name = name

    def print_name(self):
        print(self.name)

如果變量只是某個函數的臨時參數,那么,只需將其作為參數傳遞即可:

class Cafeteria:

    def __init__(self):
        pass # nothing

    def process(self, student_name):
        print(student_name + " got lunch")

在Python中,您不必像在C ++,C#,Java等中那樣聲明所有可能的對象屬性。我認為在構造函數中將它們初始化為一些null值( None0 )仍然是個好主意,但是並不是必要。 很好:

class Cafeteria:

    def set_today_menu(self, menu):
        self.menu = menu

    def process(self, student_name):
        print(student_name + " got " + self.menu)

您不必一定要訪問它們,但是它們需要在某個地方設置...如果需要,您還可以在類的任何def之外設置默認值。

def Class:
    RandomVariable = 5
    def __init__(self, val):
        self.RandomVariable = val

此方法稱為初始化器,您可以在其中初始化對象,然后向其添加屬性。 如果要創建類,則人類對象可能包含名稱,年齡和性別屬性,所有這些屬性都使用初始化程序中的自指針綁定到該對象。 同樣,初始化器也可以修改全局變量。 如果要計算出生的嬰兒數,則可以從虛擬的人類類初始化器中添加一個全局計數器變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM