Python论坛  - 讨论区

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

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

Du Jun jdu at haiercct.com.cn
Thu Dec 15 17:23:54 HKT 2005

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

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

2005年12月15日 星期四 18:11

Qiangning Hong hongqn at gmail.com
Thu Dec 15 18:11:20 HKT 2005

On 12/15/05, Du Jun <jdu at haiercct.com.cn> wrote:
> 哪有没有办法只是更新一个对象的函数呢?
> 不如让
> a.p()输出:
> first
> b.p() 输出:
> second

def p1(): print 'first'
def p2(): print 'second'
a.p = p1
b.p = p2

--
Qiangning Hong
http://hongqn.hn.org
Registered Linux User #396996

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号