假如我有这样的方法
def AAA_talk():
    pass
def AAA_fly():
    pass
def BBB_talk():
    pass
def BBB_fly():
    pass
然后我有一个函数
def handle_check(name):
    pass
h = handle_check(name="AAA")
我就可以使用h.AAA_talk 和 h.AAA_fly
如果 h = handle_check(name="BBB")
我就可以使用h.BBB_talk 和 h.BBB_fly
能构造个类什么的也可以,求方法思路?
|  |      1ligyxy      2014-12-30 12:09:05 +08:00 via Android getattr()或者locals() | 
|  |      2hahastudio      2014-12-30 12:14:58 +08:00 你需要一个 super class Foo,里面有 talk(self),fly(self) 然后 class AAA(Foo), class BBB(Foo) 继承,重写 talk 和 fly 的实现 handle_check 里传类的名字,比如 handle_check(AAA) 函数里实例一个 AAA,然后再 talk,fly | 
|      3lookhi      2014-12-30 12:50:26 +08:00 via Android 直接点. {name:func} | 
|  |      4chevalier      2014-12-30 12:53:32 +08:00 看一下 eval | 
|  |      5yakczh      2014-12-30 13:17:19 +08:00 这是工场模式吗? | 
|      6iT2afL0rd      2014-12-30 13:18:19 +08:00 建议了解一下多态的特性! | 
|  |      7recall704 OP @hahastudio 比较想用这种方法,但是不会写。 | 
|  |      8recall704 OP @hahastudio 其实我真正想的是这样的,用一个工厂模式: class A(object): def talk(self): print 'A talk' def fly(self): print 'A fly' class B(object): def talk(self): print 'B talk' def fly(self): print 'B fly' class Factory(object): def __init__(self,name): if name == 'A': return A() elif name == 'B': return B() else: return None 遇到的问题是,talk和fly 需要的参数不一样,有时候这个参数有,有时候没有。 | 
|  |      9recall704 OP | 
|  |      10hahastudio      2014-12-30 13:41:15 +08:00 @recall704 唉,去学一下面向对象和设计模式吧 例子: https://gist.github.com/hahastudio/4c544040a8026e408600 扩展阅读,请搜索 python design patterns | 
|  |      11unity0703      2014-12-30 13:41:48 +08:00 @recall704 @ligyxy    赞同 getattr() ,你可以看看这个 http://woodpecker.org.cn/diveintopython/power_of_introspection/getattr.html | 
|      1214      2014-12-30 13:44:20 +08:00 via Android hasattr和getattr | 
|  |      131989922yan      2014-12-30 14:34:05 +08:00 1. 应该是 鸭子判别 的概念。 你可以建立 class AAA 和 class BBB,在方法中,直接调用他们的方法(AAA 和 BBB的方法同名,不要变) 2. 元编程,如果想玩,也可以用 | 
|  |      14clino      2014-12-30 15:07:54 +08:00 我之前用的是 locals() 来实现这种功能 |