Python论坛  - 讨论区

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

2005年12月15日 星期四 16:39

Du Jun jdu at haiercct.com.cn
Thu Dec 15 16:39:38 HKT 2005

Class test:
         A=10
         Fun(slef):
                   Print ‘hello 1!’
 
Tt=test()
Test.a
10
test.fun()
hello 1!
如上,如果我想把对象tt中的a属性更新,只要
tt.a=20
就可以了,那如果我想替换掉tt中的fun函数改怎么做呢?
 
 
=====================
                  Du Jun
 
R&D; Center
Pegasus Telecom (Qing Dao) Co,.Ltd
Haier Group
TEl:86-532-8939618-563
FAX:86-532-8939597
Email: jdu at haiercct.com.cn
 
======================
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051215/9d7e586f/attachment-0001.html

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

2005年12月15日 星期四 16:45

limodou limodou at gmail.com
Thu Dec 15 16:45:16 HKT 2005

在 05-12-15,Du Jun<jdu at haiercct.com.cn> 写道:
>
> Class test:
>          A=10
>          Fun(slef):
>                    Print 'hello 1!'
>
> Tt=test()
> Test.a
> 10
> test.fun()
> hello 1!
>
> 如上,如果我想把对象tt中的a属性更新,只要
>
> tt.a=20
>
> 就可以了,那如果我想替换掉tt中的fun函数改怎么做呢?
>

按类的方法定义一样定义一个函数,如:

def p(self):
    print 'p'

然后使用setattr(),如:
setattr(test, 'Fun', p)

在NewEdit中的Mixin就是这样呀。记得你问过的呀。
--
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日 星期四 16:58

Hong Yuan hongyuan at homemaster.cn
Thu Dec 15 16:58:36 HKT 2005

limodou wrote:

>按类的方法定义一样定义一个函数,如:
>
>def p(self):
>    print 'p'
>
>然后使用setattr(),如:
>setattr(test, 'Fun', p)
>  
>
直接用test.Fun = p不就行了吗?用setattr有什么特别的原因吗?

还有,这种方法只能对之后生成的实例有效,对test类已经存在的实例没有作用。

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

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

limodou limodou at gmail.com
Thu Dec 15 17:05:16 HKT 2005

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]

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号