对于类'对象'定义了`__del __,`__bytes __,`__ bool__`的方法在哪里?

时间:2017-11-21 05:23:06

标签: python python-3.x class object methods

我正在逐字阅读python官方文档。

在3.3中。特殊方法名称3.3.1. Basic customization

它在<div class="preview" id="widget"> </div> ///the 1920x1080 weather div created using php <div id="canvas-out"></div> ///this is where the canvas is generated <script> $(document).ready (function(){ html2canvas($("#widget"), { proxy: 'html2canvasproxy.php', onrendered: function(canvas) { canvas.id = "thecanvasid"; theCanvas = canvas; document.body.appendChild(canvas); $("#img-out").append(canvas); var canvas = document.getElementById('thecanvasid'); var dataURL = canvas.toDataURL(); var uploadurl='upload.php';///this url converts the base url to a jpeg and uploads it $.post("demo_test_post.asp",{ data: uploadurl }); } ///on rendered }); ///html2canvas });////document ready 基本自定义下指定了16种特殊方法,我将它们收集如下:

object

问题在于其中三个不是In [47]: bc =['__new__', '__init__', '__del__', '__repr__', '__str__', '__bytes__', '__format__', '__eq__', '__le__', '__lt__', '__eq__', '__ne__', '__ge__', '__gt__', '__hash__', '__bool__'] In [48]: len(bc) Out[48]: 16 的有效属性

object

Object是所有类的基础。 2. Built-in Functions — Python 3.6.3 documentation

它没有递归基类。

In [50]: for attr in bc: ...: if hasattr(object,attr): ...: pass ...: else: ...: print(attr) ...: __del__ __bytes__ __bool__ __del____bytes__为类&#39;对象&#39;定义的方法在哪里?

2 个答案:

答案 0 :(得分:0)

  

为“对象”类定义__del____bytes____bool__的方法在哪里?

object未定义它们。这些是您可以在类上实现的特殊方法。

误解可能是因为文档说object.__bool__,但object.只是意味着它是对象的方法(在“实例”意义上)如果实现。 同样,该文档页面列表中的后续示例也显示了使用class.__subclasscheck__的元类的特殊方法。这并不意味着它总是被实现,更像是如果实现它可以在类上使用。

答案 1 :(得分:0)

__del__绝对不能存在

object - 它在类中的存在会改变垃圾收集器处理其实例的方式,因此在object上使用此方法会使任何上课没有。

仅当您想要覆盖在布尔上下文中将对象视为truthy的默认行为时,才需要

__bool__object无需覆盖该行为。

我不确定__bytes__的内容是什么,我认为如果不存在(或类似内容),则默认为__str__