python向类添加方法

python向类添加方法,第1张

设想一种情况,有一个类,随着应用需求的增加,类中方法需要不断增加。当然也可以用继承来拓展方法。但python其实可以直接向类中添加方法。主要实现方法是使用装饰器,对类进行方法添加。以下是python3中的实现:

Obj-C用起来真是各种happy,比如现在有这样一种情况:有一个类,我们希望它能响应一个消息(message),但是这个类没有相应的方法(method),而你又偏偏不能重写/继承这个类。这时我们可能会想到,能不能动态地给类添加一个方法呢?感谢Obj-C,仅需简单几步就能实现。

先看一段代码

#if TARGET_IPHONE_SIMULATOR 

#import  

#else #import  

 #import  

#endif   

@interface EmptyClass:NSObject   

 @end   

 

 @implementation EmptyClass   

@end   

 

void sayHello(id self, SEL _cmd) 

 { NSLog(@"Hello") }   

 

- (void)addMethod 

 { 

     class_addMethod([EmptyClass class], @selector(sayHello2), (IMP)sayHello, "v@:")   

     // Test Method 

    EmptyClass *instance = [[EmptyClass alloc] init] [instance sayHello2]

    [instance release]   

}

我们首先定义了一个EmptyClass,继承NSObject,没有任何自带方法,接着定义了一个函数。这里提一句,Obj-C的方法(method)就是一个至少需要两个参数(self,_cmd)的C函数,这个函数仅仅输出一句Hello。接下来在addMethod方法中,我们调用class_addMethod()为EmptyClass添加方法,class_addMethod()是这样定义的:

BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)

参数说明:

cls:被添加方法的类

name:可以理解为方法名,这个貌似随便起名,比如我们这里叫sayHello2

imp:实现这个方法的函数

types:一个定义该函数返回值类型和参数类型的字符串,这个具体会在后面讲

接着创建EmptyClass的实例,调用sayHello2,运行,输出Hello,添加方法成功。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11684246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存