gpt4 book ai didi

python - self 在 python 类中的哪个位置?

转载 作者:行者123 更新时间:2023-11-28 22:48:38 26 4
gpt4 key购买 nike

在书learning python 5th edition (o'reilly Mark Lutz)page912)

class PrivateExc(Exception): pass                   # More on exceptions in Part VII
class Privacy:
def __setattr__(self, attrname, value): # On self.attrname = value
if attrname in self.privates:
raise PrivateExc(attrname, self) # Make, raise user-define except
else:
self.__dict__[attrname] = value # Avoid loops by using dict key
class Test1(Privacy):
privates = ['age']
class Test2(Privacy):
privates = ['name', 'pay']
def __init__(self):
self.__dict__['name'] = 'Tom' # To do better, see Chapter 39!

可能是第5行错了raise PrivateExc(attrname, self) ,
self 参数将被设置为第一个位置。
该行是否会更改为 raise PrivateExc(self,attrname)?为什么不呢?

最佳答案

其实没关系。

Exception 继承子类而不使用任何额外的构造函数不会限制您可以作为参数传递给异常类的内容。您可以按任何顺序传递它们。

传递给 PrivateExc 类的参数只是作为实例属性 .args 存储在实例中

示例:

>>> class MyError(Exception):
... """MyError"""
...
>>> e = MyError("foo", "bar")
>>> e.args
('foo', 'bar')
>>> e
MyError('foo', 'bar')

这在您正在阅读的书中的基本含义是;

如果你要捕获异常 PrivateExc 你会做这样的事情:

try:
...
except PrivateExc as error:
attrname, obj = error.args
...

关于python - self 在 python 类中的哪个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com