为什么我们要将Class传递给函数

时间:2012-05-04 02:54:31

标签: python class

由于Classes是Python中的第一类对象,我们可以将它们传递给函数。例如,以下是我遇到的一些代码:

ChatRouter = sockjs.tornado.SockJSRouter(ChatConnection, '/chat')

其中ChatConnection是在同一模块中定义的类。我想知道这种做法的常见用户案例是什么?

此外,在上面的代码示例中,为什么变量'ChatRouter'大写?

2 个答案:

答案 0 :(得分:1)

传递类可能对自定义和灵活的代码很有用。该函数可能想要创建给定类的多个对象,因此将类传递给它是实现此目的的另一种方法(另一种方法是传递某种工厂函数)。例如,在您给出的示例中,SockJSRouter最终将连接类传递给Session,然后使用它来构造新的连接对象。

至于ChatRouter,我想这只是一个命名约定。虽然建议Python程序员遵循PEP 8,而且很多人都遵循PEP 8,但并不是严格要求,而且有些项目遵循不同的命名约定。

答案 1 :(得分:1)

在不知道该代码的任何其他内容的情况下,我猜是这样的:

好的,我查看了来源。虽然看似合理,但线下方不正确。基本上代码所做的是使用ChatConnection来创建一个Session对象来执行其他操作。 ChatRouter只是一个命名不好的常规变量,而不是类名。


SockJSRouter是一个类,它接受另一个类(称为connection)和一个字符串作为参数。它使用__new__来创建SockJSRouter的实例,而不是使用(可能是子类)connection的特殊类的实例。这可以解释为什么ChatRouter被大写,因为它是一个类名。返回的类将使用connection来概括很多内容,因为connection将负责处理通过网络或其他任何方式的通信。因此,通过使用不同的connection,可以处理不同的协议。 ChatConnection可能是IRC上的一层。

所以基本上,常见用例(可能在这里使用)是泛化,而BactrianCase名称的原因是因为它是一个类(只是在运行时生成的一个)。