【发布时间】:2025-12-05 19:55:02
【问题描述】:
我想使用字符串作为子类名称从超类动态创建子类。例如,假设我有一个代表 HTML 标记的类。
class Tag:
def __init__(self, content, **attr):
pass
def __repr__(self):
return f"<{self.__class__.__name__.lower()}>{content}</{<self.__class__.__name__.lower()>}>"
我也有这个清单:
class_names = ["Div", "A", "Body", "Html", "Nav"] # etc. Basically contains all html tags.
我想以某种方式创建 Tag 类的子类(可能使用 for 循环),即我想要新的类,即 Div, A, Body, Html, Nav, etc.,它们都是 Tag 类的子类。有没有快速的方法来做到这一点?不显式声明一个类也是不好的做法吗?
编辑:我想创建子类,不是对象。
编辑2:正如Goyo所说,我的目的并不明确,我想基本上一口气实现所有html标签类。很多人已经实现了 HTML 生成器,但是对于 this example,他们必须定义 Tag 类的所有子类,并在子类中写 pass,如下所示:
...
class Address(HtmlTag):
"""Defines contact information for the author/owner of a document"""
pass
class Applet(HtmlTag):
"""Not supported in HTML5. Use <embed> or <object> instead."""
pass
class Area(SelfClosingHtmlTag):
"""Defines an area inside an image-map"""
pass
...
这是我想要避免的,因为这对我来说看起来像是多余的重复代码和大量的复制粘贴。
编辑 3:我很抱歉提到其他人的代码作为 “坏” 示例。无论如何,这不是我的意图。我只是想学习如何编写更短更简洁的代码。
【问题讨论】:
-
如果希望通过动态创建类来节省代码行/键入时间,我建议不要这样做,特别是如果您的子类除了名称之外基本上都是相同的东西。你需要什么来做这件事?
-
@AGNGazer 我不明白这如何回答我的问题。
标签: python inheritance subclass