When I'm reading the source and come across the following code
class BaseRequestHandler: """Base class for request handler classes. This class is instantiated for each request to be handled. The constructor sets the instance variables request, client_address and server, and then calls the handle() method. To implement a specific service, all you need to do is to derive a class which defines a handle() method. The handle() method can find the request as self.request, the client address as self.client_address, and the server (in case it needs access to per-server information) as self.server. Since a separate instance is created for each request, the handle() method can define other arbitrary instance variables. """ def __init__(self, request, client_address, server): self.request = request self.client_address = client_address self.server = server self.setup() try: self.handle() finally: self.finish()
What are request, client_address, and server? I think the person who wrote this code expects an object of a certain type to be stuck here. But I don't know what it is because the type is not specified. You have to find the caller and see what it is. This is because the type information in the brain of the person writing the code is omitted in the source code.