将类名作为参数传递给函数?

时间:2015-03-05 18:23:49

标签: python

在给定的代码中,它将类名称即MyRequestHandler传递给TCP,并且在将类名称作为参数后,它是如何处理的。所以我的问题是可以使用类名作为参数,类名也不会什么都可以参考呢?我为愚蠢的问题道歉!!

    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(

4 个答案:

答案 0 :(得分:17)

绝对可以将类名作为参数传递给函数:

>>> 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
>>> 

答案 1 :(得分:4)

您没有传递类的名称,而是将引用传递给该类。类就像其他所有类一样是一个对象。将其视为返回另一个对象的函数。您可以将类作为参数传递,就像传递函数,字符串或任何其他对象一样。

至于被调用的函数可以用它做什么 - 它创建该类的创建实例。在这种情况下,被调用的函数并不真正关心它使用的类,只要它实现了特定的接口即可。因此,被调用的函数看不到类的名称,它只是被告知如何创建它的实例(通过给出类的引用)

对于服务器,它需要为服务器的每个连接创建一个对象的新实例。因此,您为它提供了您希望它使用的类,并为每个连接创建实例。这使服务器可以在需要时创建对象,而不是要求您提前创建它们。

答案 2 :(得分:0)

可以将类名用作参数吗? 是。但是在您的代码中,您没有将类名传递给TCP构造函数,而是将请求处理程序传递给构造函数。

类名也没有提到任何东西,所以怎么可能? 如上所述,您将请求处理程序传递给Tcp构造函数,您的请求处理程序引用TCP服务器将用于处理传入请求的操作。所以它确实是指某种东西。

答案 3 :(得分:0)

是的,您可以传递给类参数或函数参数

1 - 使用类型(对象)

2 - 类名

==>>将 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))