python如何(查看类的所有实例),且(不通过某实例名称)调用(该实例)的方法

 mobiledu2502860983 发布于 2022-10-29 15:39

1.需要在其他运行时,调用父类中某个实例,因为该实例的方法会写入一个log.txt文件,如果重新调用的话,那么会新建一个新的文件,所以有什么办法,直接调用原实例的方法,并且不需要该实例的名称。

2.代码:
# 用print和i++示意写log.txt

class Alpha(object):
    def __init__(self):
        self.var = 0

    def increase(self):
        self.var += 1
        print self.var   
>>>
a = A()
a.increase()  # --> 1
a.increase()  # --> 2
b.increase()  # --> 1 重新写log 不对
??.increase() # -->3 如何不用a.crease()的形式 继续调用绑定到a的increase()方法?

有没有利用 getattr*.__dict__

print getattr(a2, 'increase')
print getattr(Alpha, 'increase')
print a1.__dict__
print Alpha.__dict__

>>>
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'increase', 'var']
>
>

{'var': 3}
{'__module__': 'main', 'increase': , '__dict__': , '__weakref__': , '__doc__': None, '__init__': }

这些特性 获取class Alpha 实例方法的绑定地址如 >
然后调用a的方法 而不通过a.increase()。

1 个回答
  • 问题描述有点绕, 不知道是不是我理解的样子: 其实是为了把某个对象实例化的时候,记录下来。就比如你的a对象就是专职做这个事情的。如果我理解的对的话,可以这样实现,比如计数:
    借用一个长度为1的list对象存储 log. 不知道是不是你想要的意思--不是的话,我就忽略答案了。


    是这个意思吧?

    class A(object):
        obj = [0]
    
        def __init__(self, name=""):
            if name == "a":
                self. obj[0] = self
                self.obj[0].var = 0
            self.name = name
    
        def increase(self):
            if isinstance(self.obj[0], A):
                self.obj[0]._increase()
    
        def _increase(self):
            self.obj[0].var += 1
            print 'it is the object:', self.obj[0].name
            print 'the val:', self.obj[0].var
    

    执行效果如下:

    In [2]: a = A('a')
    
    In [3]: a.increase()
    it is the object: a
    the val: 1
    
    In [4]: b = A()
    
    In [5]: b.increase()
    it is the object: a
    the val: 2
    
    In [6]: c = A()
    
    In [7]: c.increase()
    it is the object: a
    the val: 3
    
    2022-10-31 00:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有