簡體   English   中英

將 class 名稱作為參數傳遞給 function?

[英]passing class name as argument to function?

在給定的代碼中,它正在將 class 名稱即 MyRequestHandler 傳遞給 TCP,並且在將 class 名稱作為參數之后它做了什么。所以我的問題是 class 名稱可以用作參數並且 class 名稱也沒有引用任何東西那怎么可能???我為愚蠢的問題道歉!

    from SocketServer import (TCPServer as TCP,
    StreamRequestHandler as SRH)
    from time import ctime
    HOST = ''
    PORT = 21567
    ADDR = (HOST, PORT)
    class MyRequestHandler(SRH):
        def handle(self):
            print '...connected from:',self.client_address
            self.wfile.write('[%s] %s' % (ctime(),
                self.rfile.readline()))

   tcpServ = TCP(ADDR, MyRequestHandler)
   print 'waiting for connection...'
   tcpServ.serve_forever(

絕對可以將類名作為參數傳遞給函數:

>>> class a():
...     def __init__(self):
...             print "an object from class a is created"
... 
>>> def hello(the_argument):
...     x = the_argument()
... 
>>> hello(a)
an object from class a is created
>>> 

您沒有傳遞類的名稱 ,而是傳遞對類的引用 類就像其他所有類一樣是一個對象。 將其視為返回另一個對象的函數。 您可以將類作為參數傳遞,就像傳遞函數,字符串或任何其他對象一樣。

至於被調用函數可以用它做什么 - 它創建該類的創建實例。 在這種情況下,被調用的函數並不真正關心它使用哪個類,只要它實現特定的接口即可。 因此,被調用的函數永遠不會看到類的名稱,它只是告訴如何創建它的實例(由於給出了對類的引用)

對於服務器,它需要為服務器的每個連接創建一個對象的新實例。 因此,您為它提供了您希望它使用的類,並為每個連接創建實例。 這使服務器可以在需要時創建對象,而不是要求您提前創建它們。

可以將類名用作參數嗎? 是。 但是在您的代碼中,您沒有將類名傳遞給TCP構造函數,而是將請求處理程序傳遞給構造函數。

類名也沒有提到任何東西,那怎么可能呢? 如上所述,您將請求處理程序傳遞給Tcp構造函數,您的請求處理程序引用TCP服務器將用於處理傳入請求的操作。 所以它確實指的是某種東西。

是的,您可以傳遞給 class args 或 function 參數

1 - 使用類型(對象)

2 - class 姓名

==>> 將 ClassA 傳遞給 ClassB 和 fname 作為參數

class ClassA(object):

    def __init__(self,):

        pass



class ClassB(object):

    def __init__(self, arg):
        print(type(arg))
        pass


def fname(arg):
    print(type(arg))
    pass
valueA: ClassA = ClassA()

ClassB(type(valueA))
ClassB(ClassA)

fname(type(valueA))
fname((ClassA))

暫無
暫無

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

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