我想重写我的Python类__getattribute__
和__setattr__
方法。我的用例是通常的用例:我有一些要处理的特殊名称,并且我希望其他任何行为都具有默认行为。因为__getattribute__
,似乎我可以通过提高请求默认行为AttributeError
。但是,我怎样才能做到这一点__setattr__
呢?这是一个简单的示例,使用不可变字段“A”,“ B”和“ C”实现一个类。
class ABCImmutable(SomeSuperclass):
def __getattribute__(self, name):
if name in ("A", "B", "C"):
return "Immutable value of %s" % name
else:
# This should trigger the default behavior for any other
# attribute name.
raise AttributeError()
def __setattr__(self, name, value):
if name in ("A", "B", "C"):
raise AttributeError("%s is an immutable attribute.")
else:
# How do I request the default behavior?
???
用什么代替问号?对于老式类,答案显然是self.__dict__[name] = value
,但是文档表明这对于新型类是错误的。
它的
super(ABCImmutable, self).__setattr__(name, value)
在Python 2中,或
super().__setattr__(name, value)
在Python 3中
另外,饲养AttributeError
是 不是 你如何退回到默认行为__getattribute__
。您可以使用
return super(ABCImmutable, self).__getattribute__(name)
在Python 2或
return super().__getattribute__(name)
在Python 3上。
筹集会AttributeError
跳过默认处理并转到__getattr__
,或者AttributeError
如果没有则在调用代码中产生__getattr__
。
请参阅有关自定义属性访问的文档。
听起来有点愚蠢,但我需要我的方法的帮助,这很烦人。我试着在网上查找,因为是一个出错和“找不到Kid constructor#2”的程序,尽管它在那里,我甚至会做其他事情,但它不起作用。好吧,这太多了,下面是我的代码: 好的,所以我上面的toString(我知道,我的第三个参数是关闭的,应该是字符串)是关闭的。如果我硬编码第三个值,它就会失控,说它找不到这个(上面)。那么我怎么才能得到日期并把它分开
问题内容: 当我在Python中打开FIFO(命名管道)进行写入时,发生了非常奇怪的事情。考虑一下当我尝试打开FIFO以便在交互式解释器中进行写入时发生的情况: 以上行将阻塞,直到我打开另一个解释器并键入以下内容: 我不明白为什么我必须等待打开管道进行读取,但是让我们跳过它。上面的代码将阻塞,直到有可用的数据为止。但是,假设我回到第一个解释器窗口并输入: 预期的行为是,在第二个解释器上,对的调用将
问题内容: 我想定义一个包含和方法的类,可以按如下方式调用该类: 为了不使用隔行扫描类,我的想法是覆盖和方法并检查给定名称是否将return重定向到。但是我遇到了无限递归的问题。示例代码如下: 正如在代码中尝试创建新属性一样,它调用,再次调用,依此类推。我怎么需要更改此代码,即,在这种情况下,一个新的属性的创建,持有的价值? 还是有更好的方法来处理“映射”到的呼叫? 总是有关于为什么的问题:我需要
问题内容: 如果我导入的模块定义了属于同一个包的同名类,则由于父包的__init__.py,它将作为类而不是模块导入。有关详细信息,请在不同目录中查看不同的导入结果。在Python Shell或ipython Shell中,如果我这样做 MyModule始终作为Class导入,因此我无法重新加载它(reload()仅适用于模块)。跑 再次似乎不更新类定义。有人可以建议一种在python shell
我有一个python 3脚本,它应该从.csv文件中获取一些数据并将其写入json文件。在我的处理过程中,编码是正确的,因此德语元音变音符ü,ä或度符号°就像它们一样(#编码=标题处的cp1252)。 但是当我通过json.dump()写判决时,编码就消失了… 如何使用正确的编码向json文件写入判决?
本文向大家介绍python中如何写类,包括了python中如何写类的使用技巧和注意事项,需要的朋友参考一下 类的定义 Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类: class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承