小编Rém*_*net的帖子

通过共享对象的__dict__属性创建视图

我目前正在寻找一种在python对象上创建“视图”的可维护且易于使用的方法。具体来说,我有很多类,它们共享几种常见的方法,并且我想包装这些类的实例,以修改这些方法的行为。

当然,我可以按照包装模式为每个类创建一个新类,重新定义完整的接口并将每个方法重定向到原始对象,但我希望覆盖的对象除外。这是不切实际的,因为所需的代码量很大,并且在更改任何类时都需要维护。

一些实验表明,我可以大量使用元类和自省功能来生成包装器,以“重新创建”包装器对象中的接口,但是事实证明,使用和调试它非常可怕,特别是如果A具有属性(不包括代码)

第二次尝试表明,通过共享__dict__属性和覆盖,可以用相当少的代码来完成__class__。这将导致以下代码(https://repl.it/repls/InfantileAshamedProjector):

##############################
# Existing code
##############################

class A1:
  def __init__(self, eggs):
    self.eggs = eggs

  # Lots of complicated functions and members

  def hello(self):
    print ("hello, you have %d eggs" % self.eggs)

  def meeting(self):
    self.hello()
    print ("goodbye")

  # Lots of complicated functions calling hello.

# Lots of A2, A3, A4 with the same pattern

##############################
# "Magic" code for view generation
##############################

class FutureView:
  pass

def create_view(obj, name):
  class View(obj.__class__):
    def hello(self): …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

6
推荐指数
1
解决办法
60
查看次数

标签 统计

python ×1

python-3.x ×1