不,Python 的 __oct__() 已经不存在了。用这个代替!

99 阅读2分钟

问题所在

TypeError: '...' object cannot be interpreted as an integer

如果你正在阅读这篇文章,你很有可能一直在想这些问题。

  • 给出一个自定义类My_Class 。你想重写Python中的内置函数的行为。 [oct(x)](https://blog.finxter.com/python-oct-function/)函数的行为,当在一个My_Class 对象上调用它时,x
  • 你知道Dunder方法的特点是覆盖内置函数的自定义行为。
  • 你得出结论,oct() 的dunder方法是__oct__() ,因为毕竟它应该是这样工作的,对吗?
  • 错了!如果你尝试这样做,你会得到以下错误。

错误的例子--不要!

class My_Class:
    def __oct__(self): # WRONG!
        return 42


x = My_Class()
print(oct(x))

输出结果表明出了问题。

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 7, in <module>
    print(oct(x))
TypeError: 'My_Class' object cannot be interpreted as an integer

该怎么做?

你如何解决TypeError: 'My_Class' object cannot be interpreted as an integer?

要解决TypeError ,当试图用函数的行为覆盖 [oct()](https://blog.finxter.com/python-oct-function/)``__hex__() 函数的行为时,要解决的方法是忘记__oct__() 方法,而使用__index__() 方法。

[__index__()](https://blog.finxter.com/python-__index__-magic-method/)方法返回一个与给定对象相关的整数值。然后这个整数被自动转换为八进制数。

正确的例子--做!

下面是一个简单的例子,它是如何工作的。

class My_Class:
    def __index__(self): # Correct!
        return 42


x = My_Class()
print(oct(x))
# 0o52

如果你想知道输出0o52 ,而不是你所定义的,即42 ,整数42被转换为八进制数0o52 。请看这里。

>>> oct(42)
'0o52'

背景oct() - 不是一个魔术

Python的内置**oct(integer)**函数接受一个整数参数,并返回一个八进制字符串,前缀为"0o"

从哪里开始?

理论够多了,让我们来实践一下吧!

要想在编码方面取得成功,你需要走出去,为真实的人解决真实的问题。这样你才能轻松成为六位数的收入者。而这也是你如何在实践中打磨出你真正需要的技能。毕竟,学习没有人需要的理论有什么用?

实践项目就是你在编码中磨练你的锯子的方法!

你想通过专注于实际的代码项目,成为一个代码大师,真正为你挣钱,为人们解决问题吗?

那就成为一名Python自由开发者吧!这是接近提高Python技能任务的最佳方式--即使你是一个完全的初学者。

参加我的免费网络研讨会"如何建立你的高收入技能Python",看看我是如何在网上发展我的编码业务的,你也可以这样做--从你自己家里的舒适度。

现在就参加免费网络研讨会