覆盖(扩展)默认类?

时间:2017-02-10 14:26:16

标签: python class extend built-in

我希望能够在创建int / set / str / dict /等新对象时覆盖默认类。

int的示例:

class MyInt(int):
    def __call__(self):
        return self ** 2

int = MyInt

a = int('2')
b = 3
print(a)
print(a())
print(int(3)())

print(5()) # Error -> this is what interests me to get working.

有可能吗?

1 个答案:

答案 0 :(得分:0)

我认为您必须再次阅读一些5()标识符约定。

Python标识符:

Python标识符是用于标识变量,函数,类,模块或其他对象的名称。标识符以字母A到Z或a到z或下划线(_)开头,后跟零个或多个字母,下划线和数字(0到9)。

Python不允许在标识符中使用标点符号,如@,$和%。 Python是一种区分大小写的编程语言。因此,人力和人力是Python中的两个不同的标识符。

以下是Python标识符的命名约定:

  • 类名以大写字母开头。所有其他标识符都以小写字母开头。

  • 使用单个前导下划线启动标识符表示该标识符是私有的。

  • 启动带有两个前导下划线的标识符表示一个强私有标识符。

  • 如果标识符也以两个尾随下划线结尾,则标识符是语言定义的特殊名称。

因此,您的代码将因Python而失败,因为它不会填充class MyInt(int): def __call__(self): return self ** 2 int = MyInt a = int('2') print(a) print(a()) print(int(3)()) # Note here the underscore '_' _5 = int('3') print(_5) print(_5()) 命名/标识符规则。

否则,您可以将代码破解为:

2
4
9
3
9

输出:

{{1}}