使用自定义方法和属性扩展内置 Python 类型
在 Python 中,您可能会遇到希望扩展内置类型的场景具有附加方法或属性的类型。然而,直接改变这些类型是不允许的。
例如,如果您尝试向 dict 类型添加 helloWorld() 方法(如 JavaScript 中所示),您会发现不支持这种方法。
使用子类化和命名空间替换的解决方法
虽然您无法直接扩充原始类型,但存在一个聪明的解决方法。通过对目标类型进行子类化并随后在内置/全局命名空间中替换它,您可以有效地模仿所需的行为。
这是 Python 中的实现:
# Built-in namespace
import __builtin__
# Extended subclass
class mystr(str):
def first_last(self):
if self:
return self[0] self[-1]
else:
return ''
# Substitute the original str with the subclass on the built-in namespace
__builtin__.str = mystr
print(str(1234).first_last()) # 14
print(str(0).first_last()) # 00
print(str('').first_last()) # ''
# Note that objects created by literal syntax will not have the extended methods
print('0'.first_last()) # AttributeError: 'str' object has no attribute 'first_last'
在此示例中,mystr 子类通过添加 first_last() 方法来扩展 str 类型。 __builtin__.str 赋值将所有内置 str 调用重定向为使用修改后的子类。因此,使用内置 str() 构造函数实例化的对象现在拥有 first_last() 方法。
但是,需要注意的是,使用文字语法(“string”)创建的对象仍将保留为未修改的 str 类型,不会继承自定义方法。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3