python - 父类在子类中使用的 settattr

标签 python parent-child parent setattr

我有一个图书馆,其中有一位家长和一打 child :

# mylib1.py:
#
class Foo(object):
  def __init__(self, a):
    self.a = a


class FooChild(Foo):
  def __init__(self, a, b):
    super(FooChild, self).__init__(a)
    self.b = b

# more children here...

现在我想用一个简单的(但有点特殊,用于另一种方法)方法扩展该库。所以我想更改父类并使用它的子类。

# mylib2.py:
#
import mylib1

def fooMethod(self):
  print 'a={}, b={}'.format(self.a, self.b)

setattr(mylib1.Foo, 'fooMethod', fooMethod)

现在我可以像这样使用它了:

# way ONE:
import mylib2

fc = mylib2.mylib1.FooChild(3, 4)
fc.fooMethod()

或者像这样:

# way TWO:
# order doesn't matter here:
import mylib1
import mylib2

fc = mylib1.FooChild(3, 4)

fc.fooMethod()

所以,我的问题是:

  1. 这是好事吗?
  2. 如何以更好的方式完成这项工作?

最佳答案

一种常见的方法是使用 mixin

如果需要,可以动态添加 How do I dynamically add mixins as base classes without getting MRO errors? .

关于python - 父类在子类中使用的 settattr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30799033/

相关文章:

PHP 对象到 JSON : How to create class that will have multiple recursive children?

javascript - 获取父节点的属性

python - 如何使用 virtualenv 和 Django 隐藏我的 secret_key?

python - 上传文件时显示微调器 Django 和 Ajax

C++ 窗口父子

JavaScript 子类 - 如何继承参数中定义的父值?

javascript - 在翻转时切换父元素的类

python - 如何从 eclipse 执行 Robot 测试用例,它将命令行列表参数作为输入?

python - 在 Windows 上使用带对数刻度的 matplotlib 出现 Unicode 错误

C# 试图使标签(对象)从表单的一侧反弹到另一侧