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

Saq*_*Ali 0 python inheritance tornado

我有一个 Python/ Tornado应用程序,它使用以下 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
Run Code Online (Sandbox Code Playgroud)

我希望所有实例MyClass2的实例变量都m设置为整数 3。但是任何实例都MyClass3应该覆盖它并m设置为整数 4。我该怎么做?

我尝试将以下构造函数分别添加到MyClass2MyClass3,但是当我尝试创建 的实例时MyClass3,出现以下错误:TypeError: __init__() takes exactly 1 argument (3 given)

我的课堂2。初始化():

def __init__(self):
    self.m = 3 # This value will be overridden by a subclass
Run Code Online (Sandbox Code Playgroud)

我的课堂3。初始化():

def __init__(self):
    self.m = 4
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

tornado.web.RequestHandler已经有一个__init__方法和龙卷风希望它有两个参数(加上self一个绑定方法的参数)。您的覆盖版本不采用这些。

更新您的__init__方法以获取任意额外参数并通过以下方式传递这些参数super()

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
Run Code Online (Sandbox Code Playgroud)

您还可以使用该RequestHandler.initialize()方法来设置每个请求的实例变量;您可能需要使用super()再通过在调用父类,如果你的父类initialize()更多的不仅仅是一组工作self.m