您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python相当于.Net的密封类

Python相当于.Net的密封类

您可以使用元类来防止子类化:

class Final(type):
    def __new__(cls, name, bases, classdict):
        for b in bases:
            if isinstance(b, Final):
                raise TypeError("type '{0}' is not an acceptable base type".format(b.__name__))
        return type.__new__(cls, name, bases, dict(classdict))

class Foo:
    __Metaclass__ = Final

class Bar(Foo):
    pass

给出:

>>> class Bar(Foo):
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in __new__
TypeError: type 'Foo' is not an acceptable base type

__Metaclass__ = Final条线使Foo班级“密封”。

请注意,您将在.NET中使用密封类作为性能指标;因为不会有任何子类化方法可以直接解决。Python方法查找的工作方式截然不同,就方法查找而言,使用上面的示例中的元类并没有优点或缺点。

python 2022/1/1 18:39:50 有248人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶