如何在Python中进行此类继承?
我有一个Python/应用程序,它通过以下3个类响应HTTP请求:如何在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):
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