相关疑难解决方法(0)

5409
推荐指数
22
解决办法
75万
查看次数

将装饰器附加到类中的所有函数

我真的不需要这样做,但只是想知道,有没有办法将装饰器绑定到类中的所有函数,而不是明确地为每个函数声明它.

我认为它然后变成了一种方面,而不是装饰者,它确实感觉有点奇怪,但是想到时间或认证这样的东西它会非常整洁.

python oop class decorator class-method

47
推荐指数
4
解决办法
1万
查看次数

python:如何从其中引用类(如递归函数)

对于递归函数,我们可以这样做:

def f(i):
  if i<0: return
  print i
  f(i-1)

f(10)
Run Code Online (Sandbox Code Playgroud)

但有没有办法做以下事情?

class A:
  # do something
  some_func(A)
  # ...
Run Code Online (Sandbox Code Playgroud)

python class

25
推荐指数
4
解决办法
2万
查看次数

如何从Python 3.x中的类定义传递参数到元类?

这是如何从类定义向元类传递参数的Python 3.x版本问题,由请求单独列出,因为答案与Python 2.x有很大不同.


在Python 3.x中,如何传递参数给元类的__prepare__,__new____init__功能,这样一类的作者可以对类应该如何被创建的元类给输入?

作为我的用例,我正在使用元类来自动将类及其子类注册到PyYAML中以加载/保存YAML文件.这涉及PyYAML库存中没有的额外运行时逻辑YAMLObjectMetaClass.另外,我想允许类作者有选择地指定PyYAML用来表示用于构造和表示的类和/或函数对象的标记/标记格式模板.我已经发现我不能使用PyYAML的子类YAMLObjectMetaClass来实现这一点 - "因为__new__根据我的代码注释,我们无法访问实际的类对象- 所以我正在写我自己的包含PyYAML注册函数的元类.

最终,我想做的事情是:

from myutil import MyYAMLObjectMetaClass

class MyClass(metaclass=MyYAMLObjectMetaClass):
    __metaclassArgs__ = ()
    __metaclassKargs__ = {"tag": "!MyClass"}
Run Code Online (Sandbox Code Playgroud)

...其中__metaclassArgs__,并__metaclassKargs__会争论去的__prepare__,__new____init__方法MyYAMLObjectMetaClass的时候MyClass是越来越创建的类的对象.

当然,我可以使用此问题的Python 2.x版本中列出的"保留属性名称"方法,但我知道有一种更优雅的方法可用.

python metaprogramming metaclass python-3.x

13
推荐指数
1
解决办法
3694
查看次数