动态语言和静态语言最大的不同就是函数和类的定义,不是编译时定义的而是运行时动态创建的。
最后解释一下类属性和实例属性直接在class中定义的是类属性:
实例屬性必须通过实例来绑定,比如self.name = 'xxx'来测试一下:
>>> # 由于实例属性优先级比类属性高,因此它会屏蔽掉类的name属性:
因此,在编写程序的时候千万不要把实例属性和类属性使用相同的名字。
在我们编写的ORM中ModelMetaclass会删除掉User类的所有类属性,目的就是避免造成混淆
我想通过元类做到以下几点:
1.获取基于它产生的类的具有特定命名规则的函数列表
2.列表里面的函数可以直接被调用,而无需做多余额外的操作
关键是第二点该如何操作 例如列表 lst=[func1, func2]
,我想实现的是可以直接通过func1()
、func2()
这种方式来运行函数
我目前能做到的解决方案是
请问这是最优的吗或者一般的解决方法是什麼?
有没有办法在元类里面不创建 obj 的情况下实现我上面的需求? 即obj = type.__new__(cls, name, base, attrs)()
没有这行代码 因为 obj 并不会随着元类创建类的完毕而销毁会有一个元類创建的实例对象( obj
)常驻内存,而这个实例有太多额外的东西是不需要的我仅仅需要的是里面的两个特定函数at_func1
和at_func2
如果我把下面的at_func1(self)
里面嘚 self 删掉,确实可以实现不创建实例的情况下完成上面的需求
但是这样导致的另一个结果就是,我如果自己在其他地方新建一个 a=A()的实例那么执行a.at_func1()
就会报错,有没有办法能权衡这两点
1.在元类里面无需创建 obj
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论你可以继续到 上打开本讨论主题的完整版本。
是创意工作者们的社区是一个分享自己正茬做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。