【问题标题】:Get base class' name?获取基类的名称?
【发布时间】:2016-04-10 15:36:27
【问题描述】:

在 Python 中我定义了一个类:

class Myclass(BaseModule):

我想打印参数BaseModule

类似这样的:

class Myclass(BaseModule):
     logger.info("Argument=%s" % BaseModule.get_name())

没用:

unbound method get_name() must be called with BaseModule instance as 
first argument (got nothing instead)

【问题讨论】:

  • BaseModule().get_name()

标签: python class oop


【解决方案1】:

您可以通过以下方式访问类的名称:

BaseModule.__name__

【讨论】:

  • +1 帮助向 OP 展示更 Pythonic 的做事方式,而不是仅仅为他们提供解决方案。我打算开始建议 @classmethod,但自动定义的变量更好。
【解决方案2】:

首先,您可以在这里找到答案: solution source

    >>> class Base(object):
...     pass
...
>>> class Derived(Base):
...     def print_base(self):
...         for base in self.__class__.__bases__:
...             print base.__name__
...
>>> foo = Derived()
>>> foo.print_base()
Base

【讨论】:

    【解决方案3】:

    正如错误所说,您需要先实例化(创建一个实例)BaseModule。

    class MyClass(BaseModule):
        def __init__(self):
            base_mod = BaseModule()
            logger.info("Argument=%s", base_mod.get_name())
    

    它不是参数,它是MyClass 继承自的父类。例如,参数是来自__init__self。了解正确的术语很重要,以免日后混淆。

    【讨论】:

      【解决方案4】:

      如果要调用超类方法,可以使用super()。但这需要你有一个实例,如果你把你的日志记录代码放在那里,你就不会。

      class Base(object):
          def get_name(self):
              return "Base name"
      
      class Derived(Base):
          def __init__(self):
              print super(Derived, self).get_name()
      
      Derived() # prints 'Base name'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-25
        • 2019-09-10
        • 2011-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多