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