在给定的代码中,它将类名称即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(
答案 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))