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()。
问题描述有点绕, 不知道是不是我理解的样子: 其实是为了把某个对象实例化的时候,记录下来。就比如你的
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