静态成员的引用方法

莫贝格

所以我有一个带有几个(常规)方法的类。根据一个值,我想调用不同的方法。选择方法的这种行为是静态的(对于所有类的实例都是相同的。您将如何建议这样做?

如果实例化的状态是恒定的,并且初始化后再也没有改变,答案是否会以最佳方式实现?

例子:

PLUS = 0
MINUS = 1
OPERATIONS = [PLUS, MINUS]

class Generator(object):

    operations = {
        PLUS: self.plus,    # Not possible
        MINUS: self.minus,
    }

    def __init__(self, state):
        self._state = state

    def plus(self, a, b):
        # Depends on state
        return a + b

    def minus(self, a, b):
        return a - b if self._state else b - a

    def generate(self):
        a, b = give_me_numbers()
        for op in OPERATIONS:
            print self.operations[op](a, b)
理查德
PLUS = 0
MINUS = 1
OPERATIONS = [PLUS, MINUS]

class Generator:
    operations = {}

    def __init__(self, state):
        self._state = state

    @classmethod
    def init_operations(cls):
        cls.operations = {
            PLUS:  cls.plus,    
            MINUS:  cls.minus
        }

    def plus(self, a, b):
        # Depends on state
        return a + b

    def minus(self, a, b):
        return a - b if self._state else b - a


    def generate(self):
        a, b = 5, 10
        for op in self.operations:
            print( self.operations[op](self, a, b) )

gen = Generator(1)
gen.init_operations()
gen.generate()

为了operations存储类定义的函数,不能像您所做的那样在类的顶部完成操作。这是因为解析器无法解析您要引用的函数,因为它尚未解析它们。因此,相反,我添加了一个“静态” init_operations()。

请注意,这些操作存储为未绑定的方法(因为它是从静态内部调用的);因此,在调用这些函数时,必须将self变量作为第一个参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

引用静态成员

来自分类Dev

引用静态数据成员

来自分类Dev

使用引用变量引用静态成员

来自分类Dev

使用引用变量引用静态成员

来自分类Dev

静态引用非静态方法

来自分类Dev

静态引用非静态方法

来自分类Dev

必须调用对非静态成员函数的引用

来自分类Dev

基础:无法在XAML中引用静态成员

来自分类Dev

打字稿:自引用静态类成员

来自分类Dev

必须调用对非静态成员函数的引用

来自分类Dev

引用静态成员函数和继承

来自分类Dev

在引用任何静态成员之前调用静态构造函数

来自分类Dev

如何在类静态成员中引用静态变量?

来自分类Dev

onCreateView()-无法静态引用非静态方法

来自分类Dev

无法静态引用非静态方法getPackageManager()

来自分类Dev

无法静态引用非静态方法

来自分类Dev

无法静态引用非静态方法问题

来自分类Dev

从静态变量引用静态方法

来自分类Dev

通用<T>静态方法访问成员方法

来自分类Dev

扩展方法:在Travis CI中运行时引发“访问非静态成员需要对象引用”错误

来自分类Dev

我使用C ++引用函数或数据成员吗?(必须调用对非静态成员函数的引用)

来自分类Dev

尝试实施CRTP时“非法引用非静态成员”

来自分类Dev

对声明的C ++静态成员变量的“未定义引用”

来自分类Dev

未定义的引用,模板struct和constexpr静态成员

来自分类Dev

C ++错误:必须调用对非静态成员函数的引用

来自分类Dev

访问静态constexpr浮点成员时未定义的引用

来自分类Dev

带有静态成员的未引用对象的.NET GC

来自分类Dev

类型特征:检查引用成员变量是否为静态

来自分类Dev

在Java中,如何显式引用“ this”类的静态成员?

Related 相关文章

热门标签

归档