Python:在依赖于父类的继承类中处理可变变量的类
达到以下效果的肾盂方法是什么:Python:在依赖于父类的继承类中处理可变变量的类,python,inheritance,Python,Inheritance,达到以下效果的肾盂方法是什么: 当Result从Child2继承时-我希望getattr(Result,'Result\u string')显示Child2\u替换Child2\u格式 当结果从Child1继承时-我希望getattr(Result,'Result\u string')显示Child1\u replace parent\u格式 问题是结果类应该是通用的——当这个类从Child1或Child2继承时,代码应该工作。如何在Python中实现这一点 您可以使用来完成此任务。然后可以重写
getattr(Result,'Result\u string')
显示Child2\u替换Child2\u格式
getattr(Result,'Result\u string')
显示Child1\u replace parent\u格式
# -*- coding: utf-8 -*-
class CommonParent(object):
mutable_field = u'parent_replace'
format_field = u'parent_format'
full_pattern = u'{{to_replace}} {to_format}'
pattern = full_pattern.replace(u'{{to_replace}}', mutable_field)
result_string = pattern.format(
to_format=format_field
)
class Child1(CommonParent):
mutable_field = u'child1_replace'
class Child2(CommonParent):
mutable_field = u'child2_replace'
format_field = u'child2_format'
class Result(Child1):
pass
运行此脚本时,它会输出:
class CommonParent(object):
@property
def format_field(self):
return u'parent_format'
@property
def mutable_field(self):
return u'parent_replace'
@property
def result_string(self):
return '{0} {1}'.format(self.mutable_field, self.format_field)
class Child1(CommonParent):
@property
def mutable_field(self):
return u'child1_replace'
class Child2(CommonParent):
@property
def format_field(self):
return u'child2_format'
@property
def mutable_field(self):
return u'child2_replace'
class Result1(Child1):
pass
class Result2(Child2):
pass
if __name__ == '__main__':
r1 = Result1()
print(getattr(r1, 'result_string'))
r2 = Result2()
print(getattr(r2, 'result_string'))
我已经用classmethod解决了这个问题,不确定它是否正确,但它是有效的
child1_replace parent_format
child2_replace child2_format
# -*- coding: utf-8 -*-
class CommonParent(object):
mutable_field = u'parent_replace'
format_field = u'parent_format'
full_pattern = u'{{to_replace}} {to_format}'
@classmethod
def setVariables(cls):
cls.pattern = cls.full_pattern.replace(u'{{to_replace}}', cls.mutable_field)
cls.result_string = cls.pattern.format(
to_format=cls.format_field
)
class Child1(CommonParent):
mutable_field = u'child1_replace'
class Child2(CommonParent):
mutable_field = u'child2_replace'
format_field = u'child2_format'
class Result(Child1):
def __init__(self):
super(Result, self).setVariables()
result = Result()
print getattr(result, 'result_string')