是否可以从python中的对象(而非类)中删除方法?

是否可以从python中的对象(而非类)中删除方法?,第1张

是否可以从python中的对象(而非类)中删除方法

看起来dir()的默认工作方式是:

dir(obj) == sorted(obj.__dict__.keys() + dir(obj.__class__))

(嗯,无论如何要删除重复项)

因此,一种方法是:

class Wizard(object):    def __init__(self):        self.mana = 0    def __dir__(self):        natdir = set(self.__dict__.keys() + dir(self.__class__))        if self.mana <= 0: natdir.remove("domagic")        return list(natdir)    def addmana(self):        self.mana += 1    def domagic(self):        if self.mana <= 0: raise NotEnoughMana()        print "Abracadabra!"        self.mana -= 1

在Py2.6中的行为是:

>>> wiz = Wizard()>>> [x for x in dir(wiz) if not x.startswith("_")]['addmana', 'mana']>>> wiz.addmana()>>> [x for x in dir(wiz) if not x.startswith("_")]['addmana', 'domagic', 'mana']>>> wiz.domagic()Abracadabra!>>> [x for x in dir(wiz) if not x.startswith("_")]['addmana', 'mana']>>> wiz.domagic()Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "<stdin>", line 13, in domagic__main__.NotEnoughMana


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631852.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存