如何在Python中进行此类继承?

如何在Python中进行此类继承?,python,inheritance,tornado,Python,Inheritance,Tornado,我有一个Python/应用程序,它通过以下3个类响应HTTP请求: import tornado.web class MyClass1(tornado.web.RequestHandler): x = 1 y = 2 def my_method1(self): print "Hello World" class MyClass2(MyClass1): @tornado.web.authenticated def get(self):

我有一个Python/应用程序,它通过以下3个类响应HTTP请求:

import tornado.web
class MyClass1(tornado.web.RequestHandler):
    x = 1
    y = 2

    def my_method1(self):
        print "Hello World"


class MyClass2(MyClass1):

    @tornado.web.authenticated
    def get(self):
        #Do Something 1
        pass

    @tornado.web.authenticated
    def post(self):
        #Do Something 2
        pass


class MyClass3(MyClass2):
    pass
我希望所有实例
MyClass2
都将实例变量
m
设置为整数3。但是
MyClass3
的任何实例都应该超过它,并将
m
设置为整数4。我怎么做

我尝试分别向
MyClass2
MyClass3
添加以下构造函数,但当我尝试创建
MyClass3
的实例时,我得到了以下错误:
TypeError:\uuu init\uuuu()正好接受1个参数(给定3个)

MyClass2.init():

MyClass3.init():


重新请求处理程序

继承
RequestHandler
时,您可以:

a) 不要重写
\uuuuu init\uuuuu
(即不要提供自己的构造函数) 或
b) 如果重写
\uuuuuu init\uuuuuuuuu>(提供您自己的构造函数),那么您的构造函数应该具有相同的签名,因为框架将调用构造函数。

重新请求处理程序

继承
RequestHandler
时,您可以:

a) 不要重写
\uuuuu init\uuuuu
(即不要提供自己的构造函数) 或
b) 如果重写
\uuuu init\uuuu
(提供您自己的构造函数),那么您的构造函数应该具有相同的签名,因为框架将调用构造函数。

tornado.web.RequestHandler
已经有一个
\uuuuu init\uuuuuu
方法,tornado希望它包含两个参数(加上绑定方法的
self
参数)。重写的版本不接受这些参数

更新您的
\uuuu init\uuuu
方法以获取任意额外参数,并通过以下方式传递这些参数:


还可以使用设置每个请求的实例变量;如果父类
initialize(),则可能需要再次使用
super()
将调用传递给父类
做的工作比设置
self.m

tornado.web.RequestHandler
已经有了一个
\uuu init\uuuu
方法,tornado希望它包含两个参数(加上绑定方法的
self
参数)。您的重写版本不包含这些参数

更新您的
\uuuu init\uuuu
方法以获取任意额外参数,并通过以下方式传递这些参数:

您还可以使用设置每个请求实例变量;如果父类
initialize()
所做的工作比设置
self.m
所做的工作更多,则可能必须再次使用
super()
将调用传递给父类

def __init__(self):
    self.m = 3 # This value will be overridden by a subclass
def __init__(self):
    self.m = 4
class RequestHandler(object):
    ...
    def __init__(self, application, request, **kwargs):
        ...
class MyClass2(MyClass1):
    def __init__(self, *args, **kwargs):
        super(MyClass2, self).__init__(*args, **kwargs)
        self.m = 3

    @tornado.web.authenticated
    def get(self):
        #Do Something 1
        pass

    @tornado.web.authenticated
    def post(self):
        #Do Something 2
        pass


class MyClass3(MyClass2):
    def __init__(self, *args, **kwargs):
        super(MyClass3, self).__init__(*args, **kwargs)
        self.m = 4