instance methods and static methods in python classes
所以在python的docutils包中,有一个类(image)有一个方法(align)。据我所知,方法将self作为第一个参数,除非它们被修饰为@classmethod或@staticmethod,但Align没有。相关代码复制在下面(此处为完整代码)。
1 2 3 4 5 6 7 | class Image(Directive): def align(argument): # This is not callable as self.align. We cannot make it a # staticmethod because we're saving an unbound method in # option_spec below. return directives.choice(argument, Image.align_values) |
我将这段代码用作我自己的基础,并且我尝试了给出Align自变量并将其转换为静态方法(在更改名称以避免与Self.Align冲突之后),但这两种方法都有错误。怎么回事?
没有必要将第一个参数命名为
1 2 | i = Image() i.align() |
调用
以下函数的行为相同:
1 2 | def align(self): return directives.choice(self, Image.align_values) |
(只是简单地用更常见的
在上下文中,函数
1 2 3 4 5 6 7 8 9 | option_spec = {'alt': directives.unchanged, 'height': directives.length_or_unitless, 'width': directives.length_or_percentage_or_unitless, 'scale': directives.percentage, 'align': align, 'name': directives.unchanged, 'target': directives.unchanged_required, 'class': directives.class_option} del align |
或者放弃
1 2 3 4 5 6 7 8 | option_spec = {'alt': directives.unchanged, 'height': directives.length_or_unitless, 'width': directives.length_or_percentage_or_unitless, 'scale': directives.percentage, 'align': lambda x: directives.choice(x, Image.align_values) 'name': directives.unchanged, 'target': directives.unchanged_required, 'class': directives.class_option} |