摘要:
Go代码同时使用递归和迭代实现二叉树遍历 package main import ( "fmt" ) type TreeNode struct { Val int Left, Right *TreeNode } type stack []TreeNode func (s stack) Push(t 阅读全文
摘要:
![](https://img2020.cnblogs.com/blog/1410597/202006/1410597-20200611090721917-251633463.png)![](https://img2020.cnblogs.com/blog/1410597/202006/1410597-20200611090920322-1142894626.png) 阅读全文
摘要:
在大型的面向对象程序中,有时将类定义置于元类的控制下会很有用。元类可以检查类的定义,并用于警告程序员可能未引起注意的潜在问题(例如,使用稍微不兼容的方法签名)。 有人可能会争辩说,程序分析工具或IDE可以更好地捕获此类错误。可以肯定的是,这样的工具是有用的。但是,如果您要创建供他人使用的框架或库,则 阅读全文
摘要:
本篇文章用于记录类创建过程相关的文档,可以为以后相关博文的编写提供材料。先在这里做文档备份。 官方文档:https://docs.python.org/3.8/reference/datamodel.html customizing class creation Python Cookbook 9. 阅读全文
摘要:
修改类定义可以通过单继承,多继承(mixin),以及元类等。其实,装饰器也可以修改类定义,并且和上述提到的方案相比,更简洁直观,性能也更强。 如下: 阅读全文
摘要:
编写一个装饰器,在包装函数的调用签名中添加一个额外的参数。 但是,添加的参数不会干扰该函数的现有调用约定。 额外的参数可以通过关键字参数注入到调用签名中,如下: 若被包裹的函数已经定义了额外增加的参数,则程序会崩溃。 聪明的人会发现,使用装饰器后,新的函数的签名并没有包含 debug 参数,如下: 阅读全文
摘要:
此处必须定义类对象的__call__()方法,因为在装饰器起作用时,实际上是Profiled的实例对象充当wrapper函数。实例对象要作为函数调用(使得其变成callable对象),必须实现__call__()方法。 此外,必须实现__get__()方法以使Spam的bar方法变成描述符对象,并通 阅读全文