由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - python 可以给class动态添加method吗?
相关主题
请教一个class design的问题friend function 不能virtual 怎么搞呢?
C++ func overload question针对class的成员变量的operator能重载吗?
C++ function template问题why use static function here?
请教一个python的概念问题Java banned operator overloading
python要搞type hint了问个overloading new operator的问题
版上哪个大牛评论下python 3.5 gradual typing?请问一个implicit conversion的问题(C++)
【讨论】问一道很简单的C++题。。。。 (转载)一个inheritance 的问题
operator overloading<< or >>这个问题怎么答?
相关话题的讨论汇总
话题: class话题: adder话题: method话题: python话题: 动态
进入Programming版参与讨论
1 (共1页)
j***i
发帖数: 1278
1
我知道data member 是可以的
不知道member function 怎么加
X****r
发帖数: 3557
2
一样啊。
class Adder:
def set(self, x):
def add(y):
return x + y
self.add = add
adder = Adder()
adder.add(1) # exception, class Adder has no attribute 'add'
adder.set(2)
adder.add(1) # ==> 3

【在 j***i 的大作中提到】
: 我知道data member 是可以的
: 不知道member function 怎么加

X****r
发帖数: 3557
3
还是说你问的是如何给一个类本身(而不是某一个具体实例)加方法?
那就更简单了,直接在类对象本身上加就可以了。

【在 X****r 的大作中提到】
: 一样啊。
: class Adder:
: def set(self, x):
: def add(y):
: return x + y
: self.add = add
: adder = Adder()
: adder.add(1) # exception, class Adder has no attribute 'add'
: adder.set(2)
: adder.add(1) # ==> 3

j***i
发帖数: 1278
4
就是这个,
比如有个 class c
我要是
class c:
def func():
就成定义一个新的c , 原来的没有了
好像也不能 c.func=f ,不知道怎么龙,
大大在解答下

【在 X****r 的大作中提到】
: 还是说你问的是如何给一个类本身(而不是某一个具体实例)加方法?
: 那就更简单了,直接在类对象本身上加就可以了。

t*q
发帖数: 104
5
c.func = f should work

【在 j***i 的大作中提到】
: 就是这个,
: 比如有个 class c
: 我要是
: class c:
: def func():
: 就成定义一个新的c , 原来的没有了
: 好像也不能 c.func=f ,不知道怎么龙,
: 大大在解答下

j***i
发帖数: 1278
6
恩,我是了下,对的
我还有另外一个问题
如果我想家的是已有的method的一个overload 如何?
class c 有一个method func(int)
我想加一个 func(int,int)的overload 该如何?

【在 t*q 的大作中提到】
: c.func = f should work
X****r
发帖数: 3557
7
Python不支持method overload。你需要自己判断类型来dispatch。

【在 j***i 的大作中提到】
: 恩,我是了下,对的
: 我还有另外一个问题
: 如果我想家的是已有的method的一个overload 如何?
: class c 有一个method func(int)
: 我想加一个 func(int,int)的overload 该如何?

j*****k
发帖数: 1198
8
是不是现在python挺流行呀,怎么大家聊起它来了?

【在 j***i 的大作中提到】
: 我知道data member 是可以的
: 不知道member function 怎么加

r****t
发帖数: 10904
9
这个不能完全算 dynamic, 毕竟 definition class 的时候就必须 define method 了。如果
只是对实例动态加 method,用
obj.methodname = Types.MethodType(method, obj, obj.__class__)
这个可以用在在 obj 定义以后。 对 class 就直接加。

【在 X****r 的大作中提到】
: 一样啊。
: class Adder:
: def set(self, x):
: def add(y):
: return x + y
: self.add = add
: adder = Adder()
: adder.add(1) # exception, class Adder has no attribute 'add'
: adder.set(2)
: adder.add(1) # ==> 3

r****t
发帖数: 10904
10
This goes deep. python authors used to work towards overloading idea
(PEP3124), but later generic function is preferred.

【在 j***i 的大作中提到】
: 恩,我是了下,对的
: 我还有另外一个问题
: 如果我想家的是已有的method的一个overload 如何?
: class c 有一个method func(int)
: 我想加一个 func(int,int)的overload 该如何?

1 (共1页)
进入Programming版参与讨论
相关主题
这个问题怎么答?python要搞type hint了
question overloading ++ error版上哪个大牛评论下python 3.5 gradual typing?
one question about overloading operator delete【讨论】问一道很简单的C++题。。。。 (转载)
这段code有啥问题?operator overloading<< or >>
请教一个class design的问题friend function 不能virtual 怎么搞呢?
C++ func overload question针对class的成员变量的operator能重载吗?
C++ function template问题why use static function here?
请教一个python的概念问题Java banned operator overloading
相关话题的讨论汇总
话题: class话题: adder话题: method话题: python话题: 动态