如何在Python中不实例化对象的情况下打印类属性?

Saj*_*uuk 3 python oop class

根据这篇文章,我可以通过访问枚举实例变量str(self.__dict__),但我不知道如何使用类变量来做到这一点。

这是我想避免的

# I would like to print out class attributes by overriding `__str__` for that class.
class circle(object):
    radius = 3
    def __str__(self):     # I want to avoid instantiation like this.
        return str(circle.radius)

print(circle())    # I want to avoid instantiation. why can't I just print(circle)?
Run Code Online (Sandbox Code Playgroud)

Pau*_*tte 5

print(circle())__str__将在 Circle 实例上调用该方法。

class circle:
  def __str__(self):
    pass
Run Code Online (Sandbox Code Playgroud)

正如您在这里所看到的,您可以__str__通过在父类上使用 def 来定义 Circle 的实例。因此,您可以使用 ITS 父级来重写__str__CLASS 上的方法。

 class circle(object):
     class __metaclass__(type):
         def __str__(cls):
             return str(cls.__dict__)
     radius = 3
Run Code Online (Sandbox Code Playgroud)

现在,print circle就给你

{'__module__': '__main__', '__metaclass__': <class '__main__.__metaclass__'>, 'radius': 3, '__dict__': <attribute '__dict__' of 'circle' objects>, '__weakref__': <attribute '__weakref__' of 'circle' objects>, '__doc__': None}
Run Code Online (Sandbox Code Playgroud)

编辑 python3 元类语法

class meta(type):
  def __str__(cls):
    return str(cls.__dict__)

class circle(object, metaclass=meta):
  radius = 3
Run Code Online (Sandbox Code Playgroud)