python-从选项卡完成中隐藏不赞成使用的方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-从选项卡完成中隐藏不赞成使用的方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2589字,纯文字阅读大概需要4分钟。
内容图文
![python-从选项卡完成中隐藏不赞成使用的方法](/upload/InfoBanner/zyjiaocheng/671/fe3d1575bcf342e5ad02bd7386ae86b6.jpg)
我想控制当用户在ipython中的自定义对象上使用制表符完成功能时显示哪些方法-特别是,我想隐藏我已弃用的??函数.我仍然希望这些方法可调用,但是我不希望用户在检查对象时看到它们并开始使用它们.这有可能吗?
解决方法:
为您提供部分答案.我将发布示例代码,然后解释为什么它只是部分答案.
码:
class hidden(object): # or whatever its parent class is
def __init__(self):
self.value = 4
def show(self):
return self.value
def change(self,n):
self.value = n
def __getattr__(self, attrname):
# put the dep'd method/attribute names here
deprecateds = ['dep_show','dep_change']
if attrname in deprecateds:
print("These aren't the methods you're looking for.")
def dep_change(n):
self.value = n
def dep_show():
return self.value
return eval(attrname)
else:
raise AttributeError, attrname
因此,请注意:它们不是方法(请注意,缺少self作为第一个变量).如果您需要您的用户(或您的代码)能够在任何不赞成使用的方法上调用im_class,im_func或im_self,则此黑客将无法正常工作.另外,我非常确定这将会对性能产生影响,因为您正在__getattr__中定义每个dep’d函数.这不会影响您的其他属性查找(如果我将它们放在__getattribute__中,那将是另一回事),但是它将减慢对那些不赞成使用的方法的访问.通过将每个函数定义放在其自己的if块中(而不是进行列表成员资格检查),可以(在很大程度上(但不是全部)否定),但是根据函数的大小,维护起来确实很烦人.
更新:
1)如果您想使用已弃用的函数方法(并且可以这样做),请使用
import types
return types.MethodType(eval(attrname), self)
代替
return eval(attrname)
在上面的代码段中,并将self作为函数defs的第一个参数添加.它将它们转换为实例方法(因此您可以根据自己的意愿使用im_class,im_func和im_self).
2)如果__getattr__钩子没有让您感到兴奋,那么(我知道)还有另一种选择(虽然有自己的警告,但我们会去解决):将弃用的函数定义放在__init__内,并用自定义__dir__.这是上面的代码以这种方式显示的样子:
class hidden(object):
def __init__(self):
self.value = 4
from types import MethodType
def dep_show(self):
return self.value
self.__setattr__('dep_show', MethodType(dep_show, self))
def dep_change(self, n):
self.value = n
self.__setattr__('dep_change', MethodType(dep_change, self))
def show(self):
return self.value
def change(self, n):
self.value = n
def __dir__(self):
heritage = dir(super(self.__class__, self)) # inherited attributes
hide = ['dep_show', 'dep_change']
show = [k for k in self.__class__.__dict__.keys() + self.__dict__.keys() if not k in heritage + private]
return sorted(heritage + show)
这样做的好处是您不必在每次查找时都重新定义功能,这可以提高速度.这里的缺点是,因为您没有在每次查找时都重新定义函数,所以它们必须“持久”(如果愿意).因此,尽管自定义__dir__方法从dir(hiddenObj)中隐藏了不推荐使用的内容,因此是IPython的制表符完成功能,但它们仍然存在于实例的__dict__属性中,用户可以在其中找到它们.
内容总结
以上是互联网集市为您收集整理的python-从选项卡完成中隐藏不赞成使用的方法全部内容,希望文章能够帮你解决python-从选项卡完成中隐藏不赞成使用的方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。