我需要创建一个动态生成的类,其中包含一个调用其父方法的方法。
动态创建类的常用方法如下:
# I have a class ClassA...
class ClassA(object):
def print_something(self):
print('I am a method defined in ClassA')
# ... and I want to create a dynamically created class that inherits from ClassA
def class_s_factory(print_str):
def print_something(self):
print('I am a method defined in ClassS')
print(print_str)
cls = type('ClassS', (ClassA, ), {'print_something': print_something})
return cls
# I can finally create an instance of ClassS and use the 'print_something' method
# Get a string from the database (for example)
print_str_database = 'I am a string from the database'
test_class = class_s_factory(print_str_database)
test_instance = test_class()
test_instance.print_something()
# This will print
# I am a method defined in ClassS
# I am a string from the database
如果我想在print_something
中调用父方法,该怎么办?
我该怎么改变它?例如:
def print_something(self):
# CALL PARENT'S METHOD HERE! HOW?
print('I am a method defined in ClassS')
print(print_str)
我想要以下输出
# I am a method defined in ClassA
# I am a method defined in ClassS
# I am a string from the database
我尝试了一些我建议的答案。它有效,但有没有更好的方法来处理这种情况?
答案 0 :(得分:0)
这是我最终尝试的内容,并且有效:
class ClassA(object):
def print_something(self):
print('I am a method defined in ClassA')
# Create a factory for classes.
# Each class has a method that depends on the string given
# This method needs to call its parent's method
def class_s_factory(print_str):
def add_print_something(cls):
def print_something(self):
super(cls, self).print_something()
print('I am a method defined in ClassS')
print(print_str)
setattr(cls, 'print_something', print_something)
cls = type('ClassS', (ClassA, ), {})
add_print_something(cls)
return cls
# Get a string from the database (for example)
print_str_database = 'I am a string from the database'
test_class = class_s_factory(print_str_database)
test_instance = test_class()
test_instance.print_something()
然而,原则上可能存在获得相同结果的更好方法。