Python论坛  - 讨论区

标题:Re: [python-chinese] 如何替换对象的方法?

2005年12月15日 星期四 17:42

Du Jun jdu at haiercct.com.cn
Thu Dec 15 17:42:22 HKT 2005

好像不该这么问,呵呵
如果可以实现上面的要求,那么必然会出现这样的要求:更改了类后,其对应的对象的行为也要做相对应的改变

这个样子做勉强可以解决这个没什么意义的问题:
>>> class A:pass
...
>>> class B(A):pass
...
>>> def p(self):print 'hello'
...
>>> a=A()
>>> b=B()
>>> A.p=p
>>> a.p()
hello
>>> b.p()
hello
>>> def p(self):print 'yes'
...
>>> B.p=p
>>> b.p()
yes
>>> a.p()
hello
>>>

呵呵,仅仅是为了问题而解决问题
-----邮件原件-----
发件人: python-chinese-bounces at lists.python.cn [mailto:python-chinese-bounces at lists.python.cn] 代表 Du Jun
发送时间: 2005年12月15日 17:24
收件人: python-chinese at lists.python.cn
主题: 垃圾邮件:Re: [python-chinese] 如何替换对象的方法?

class A:pass
a=A()
b=A()
def p(self):print 'first'

A.p=p
a.p()
first
b.p()
first
这都没问题,哪有没有办法只是更新一个对象的函数呢?
不如让
a.p()输出:
first
b.p() 输出:
second




-----邮件原件-----
发件人: python-chinese-bounces at lists.python.cn [mailto:python-chinese-bounces at lists.python.cn] 代表 limodou
发送时间: 2005年12月15日 17:05
收件人: python-chinese at lists.python.cn
主题: 垃圾邮件:Re: [python-chinese] 如何替换对象的方法?

2005/12/15, Hong Yuan <hongyuan at homemaster.cn>:
> limodou wrote:
>
> >按类的方法定义一样定义一个函数,如:
> >
> >def p(self):
> >    print 'p'
> >
> >然后使用setattr(),如:
> >setattr(test, 'Fun', p)
> >
> >
> 直接用test.Fun = p不就行了吗?用setattr有什么特别的原因吗?

应该是可以,一时没想起来。用setattr()习惯了。
>
> 还有,这种方法只能对之后生成的实例有效,对test类已经存在的实例没有作用。

我试了一下,可以呀。

 >>> class A:pass
 >>> a = A()
 >>> a.p()
 Traceback (most recent call last):
   File "", line 1, in ?
 AttributeError: A instance has no attribute 'p'
 >>> A.p = p
 Traceback (most recent call last):
   File "", line 1, in ?
 NameError: name 'p' is not defined
 >>> def p(self):print 'p'
 >>> A.p = p
 >>> a.p()
 p

--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit
_______________________________________________
python-chinese
Post: send python-chinese at lists.python.cn
Subscribe: send subscribe to python-chinese-request at lists.python.cn
Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号