如何解决将属性添加到python中的第三方类的建议方法
在python中,说我有许多类A,B,C等,它们都派生自“ Base”类。 我需要在不修改Base的情况下向所有这些派生类添加新的属性(及其相关方法)。然后在 init 函数中设置属性。
我正在考虑添加另一个基类,例如
class NewBase:
__init__(self,...):
self.new_property = ...
class A1(A,NewBase):
class B1(B,NewBase):
class C1(C,NewBase):
但是多重继承会带来其他问题。 有建议的方法吗?
解决方法
注意:在上述问题中,BaseClass
或继承的A
,B
类都不能修改。
客观
我们想在其构造函数BaseClass
的{{1}}中添加一个新属性。
解决方案
让我们定义我们的NewClass
及其继承的BaseClass
,A
类:
B
以及我们要添加为属性的class BaseClass:
def __init__(self,x,y):
self.x = x
self.y = y
print(f'In BaseClass init,got parameters {self.x} {self.y}')
class A(BaseClass):
def __init__(self,y):
BaseClass.__init__(self,y)
class B(BaseClass):
def __init__(self,y)
:
NewClass
现在,我们可以使用class NewClass:
def __init__(self):
self.new_class_property = 'sabich'
print('In NewClass init')
def func1(self):
print('In func1')
def func2(self):
print('In func2')
访问BaseClass
构造函数,并使用装饰器将其他逻辑包装起来:
BaseClass.__init__
通过创建类型为# This decorator wraps adding the new parameter in the constructor
def init_decorator(fun):
# This would be the returned constructor
def ret_fun(self,*args,**kwargs):
# Adding parameter to `NewClass`
self.parameter = NewClass()
# Calling the real constructor
return fun(self,**kwargs)
return ret_fun
BaseClass.__init__ = init_decorator(BaseClass.__init__)
的对象,它可以正常工作,我们可以看到它具有A
的parameter属性:
NewClass
整个代码:
# In NewClass init
# In BaseClass init,got parameters 1 2
a = A(1,2)
# sabich
print(a.parameter.new_class_property)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。