`

method_missing(name, *args) 用法 Proxy

阅读更多
class User
class << self
    def say_hello(name)
        puts name + ' hello'
    end
end
end

class UserProxy
   # 加入类方法
    def self.method_missing(name, *args)
        User.send(name, *args)
    end
   
   # 加入实例方法
    def method_missing(name, *args)
        User.send(name, *args)
    end
end

UserProxy.say_hello('hlxwell')
up = UserProxy.new
up.say_hello('hlxwell')
分享到:
评论
1 楼 Hooopo 2009-06-21  
nice...
不过用method_missing优先级太低(在继承,mixin,甚至top level之后.. )

class User
class << self
    def say_hello(name)
        puts name + ' hello' 
    end
end
end
module UserModule
  def say_hello name
    puts name + ' hello from Module'
  end
end

class UserProxy
   #混入实例方法
   include UserModule
   # 加入类方法
    def self.method_missing(name, *args)
        User.send(name, *args)
    end
   
   # 加入实例方法
    def method_missing(name, *args)
        User.send(name, *args)
    end
end
#混入类方法
UserProxy.extend UserModule
UserProxy.say_hello('hlxwell')
up = UserProxy.new
up.say_hello('hlxwell')
#hlxwell hello from Module
#hlxwell hello from Module


相关推荐

    __VA_ARGS__用法

    调试信息的输出方法有很多种, 例如直接用printf, 或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug,而守护进程则一般是使用syslog将调试信息输出到日志文件中等等

    Python中*args和**kwargs的区别详解

    一、*args的使用方法 *args 用来将参数打包成tuple给函数体调用 def args_test(x, y, *args): print(x, y, args) args_test(1,2,3,4,5) 1 2 (3, 4, 5) 二、**kwargs的使用方法 **kwargs 打包关键字参数成dict给...

    python函数参数*args**kwargs用法实例

    # 当函数的参数不确定时,可以使用*args和**kwargs。*args没有key值,**kwargs有key值 def fun_var_args(farg, *args): print ‘args:’, farg for value in args: print ‘another arg:’,value # *args可以当作...

    Python经典面试题.doc

    class Singleton(type): def __init__(cls, name, bases, dict): super(Singleton, cls).__init__(name, bases, dict) cls.instance = None def __call__(cls, *args, **kw): if cls.instance is None: cls....

    Python可变参数*args和**kwargs用法实例小结

    主要介绍了Python可变参数*args和**kwargs用法,结合实例形式总结分析了Python中可变参数*args和**kwargs的功能、区别与具体使用技巧,需要的朋友可以参考下

    va_args_count:使用AC宏在C99 __VA_ARGS__宏中查找参数的数量

    直接使用VA_ARGS_COUNT()宏以int返回传递给它的参数数量。 printf("There are %i arguments.\n", VA_ARGS_COUNT(1, "two", 3.0)); 计数功能参数 就其本身而言,这不是很有用。 当在其他可变参数宏中使用VA_ARGS_...

    Python *args和**kwargs用法实例解析

    一、*args的使用方法 *args 用来将参数打包成tuple给函数体调用 def fun(*arg): print(arg,type(arg)) print(*arg) fun(1,2,[8,9]) (1, 2, [8, 9]) 2 [8, 9] 并不一定必须是args,也可以是别的,但是官方不建议...

    Python函数中*args和**kwargs来传递变长参数的用法

    单星号形式(*args)用来传递非命名键可变参数列表。双星号形式(**kwargs)用来传递键值可变参数列表。 下面的例子,传递了一个固定位置参数和两个变长参数。 def test_var_args(farg, *args): print formal arg:, ...

    Python 中的*args 和**kwargs

    Python 中的*args 和**kwargs的详细解释与理解

    pyglet-playground:用于测试各种pyglet功能的游乐场

    使用virtaulenv创建venv 激活环境并运行pip install -r requirements.txt 然后从您的项目根cd src && python game.py 10.04.2021: 基本视窗 import pyglet class MainWindow ( pyglet . window . Window ): def ...

    DCGAN生成艺术图片迷宫游戏图片.zip

    self.l1 = nn.Sequential(nn.Linear(args.latent_dim, (args.gf * 8) * (self.init_size ** 2))) self.main = nn.Sequential( nn.BatchNorm2d(num_features=args.gf * 8), nn.ReLU(inplace=True), nn....

    python参数传递的*args和**kwargs

    *args:表示的就是将实参中按照位置传值,多出来的值都给args,且以元组的方式呈现, 主要是 用来表示函数接收可变长度的非关键字参数列表作为函数的输入。 **kwargs:表示的就是形参中按照关键字传值把多余的传值...

    ruby2_keywords

    ruby2_keywords 提供空的Module#ruby2_... ruby2_keywords def delegating_method ( * args ) other_method ( * args ) end end 对于全局方法: require 'ruby2_keywords' ruby2_keywords def oldstyle_keyword

    7zip源码,修改了原来繁琐的调用方法,有例子

    改成只使用这两接口,足够日常编程,有动态调用例子 typedef int (__stdcall *Zip)( const char *args,const char *args2); typedef int (__stdcall *UnZip)( const char *args,const char *args2);

    Python使用metaclass实现Singleton模式的方法

    本文实例讲述了Python使用metaclass实现Singleton模式的方法。分享给大家供大家参考。具体实现方法如下: class Singleton(type): def __call__(cls, *args, **kwargs): print "Singleton call" if not hasattr...

    用实例说明python的*args和**kwargs用法

    先来看一个例子:复制代码 代码如下:&gt;&gt;&gt; def foo(*args, **kwargs): print ‘args =’, args print ‘kwargs = ‘, kwargs print ‘———————–‘  &gt;&gt;&gt; if __name__ == ‘__main__’: foo(1, 2, 3, 4) ...

    Python星号*与**用法分析

    本文实例分析了Python星号*与**用法。分享给大家供大家参考,具体如下: 1. 加了星号(*)的变量名会存放所有未命名的变量参数,不能存放dict,否则报错。 如: def multiple(arg, *args): print arg: , arg #...

    小议Python中自定义函数的可变参数的使用及注意点

    def test_list_param(*args) : for arg in args : print arg 其中 args 是一个 tuple。 字典类型的可变参数: def test_dict_param(**args) : for k, v in args.iteritems() : print k, v 其中 args 是一个 ...

    在Python中将函数作为另一个函数的参数传入并调用的方法

    在旧版本中,可以使用apply(function, *args, **kwargs)进行调用,但是在新版本中已经移除,以function(*args, **kwargs)进行替代,所以也不应该再使用apply方法 示例代码: def func_a(func, *args, **kwargs): ...

Global site tag (gtag.js) - Google Analytics