Python 如何将外部函数类传递给内部类?

Python 如何将外部函数类传递给内部类?,python,Python,作为标题,我在父类中有一个多功能函数,它将在子类a.k.a内部类中共享使用。在下面,我需要从父类传递外部发送函数。然后,将其与标识类别名子类内的call internal_send函数一起使用。结果将输出到测试 class Device: def __init__(self): self.identify = self.Identify(self.outer_send()) def outer_send(message): print(message) def

作为标题,我在父类中有一个多功能函数,它将在子类a.k.a内部类中共享使用。在下面,我需要从父类传递外部发送函数。然后,将其与标识类别名子类内的call internal_send函数一起使用。结果将输出到测试

class Device:

  def __init__(self):
    self.identify = self.Identify(self.outer_send())

  def outer_send(message):
    print(message)

  def last_error(self):
    return self.identify.error_info

  class Identify:
    def __init__(self, send):

     self.inner_send() = send()

    def set_error(self, error):
      self.error_info = error

device = Device()

device.identify.inner_send('test')

我不喜欢这个图案,我建议用不同的设计。但是,这正是我认为您想要做的:

class Device:

  def __init__(self):
      self.identify = self.Identify(self._send)

  def _send(self, message):
      print(message)

  class Identify:
      def __init__(self, _send):
          self.send = _send


device = Device()
device.identify.send('test')

几点注意:我将
outer\u send
重命名为
\u send
,因为我假设您不希望人们直接在
设备上调用它
对象-如果您这样做,只需将其重命名为
send
,它仍然可以工作;
错误
位似乎是多余的,所以省略了它;您的
outer\u send
缺少作为参数的
self
——它不需要它,但如果您确实想省去它,请使用
@staticmethod
注释该方法以避免警告。

为什么要在
设备
中定义
Identity
?@BrianJoseph我需要像javascript风格一样访问我的类。在Identify类中,将包含许多信息,如制造商、型号、imei。因此,use类将如下所示
device.Identification.manufacturer
device.Identification.model
device.Identification.imei
等等。@David不能
Identity
对象只有一个
device
的实例吗?我根本搞不清楚Identification/Identity在这里做什么。一个更普通的OOP模式是将这些东西作为设备实例的属性-Device.model、Device.imei等@David您链接的问题实际上与这个问题相同,不是吗?很好,谢谢。你能解释一下你说的模式吗?什么是名称模式样式。我只是熟悉javascript风格。这没有错,但您最好使用SimpleNamespace或数据类之类的工具,以实现同样的效果,但让其他程序员(以及未来的您)更清楚地了解您正在尝试做什么。请看这里和这里,不确定否决票的目的是什么,但如果人们对答案有疑问,我想知道原因-看起来这个问题实际上并不是链接问题的重复,尽管它似乎是关于相同的编码问题。