在python中有没有使用点运算符传递参数的方法?

2024-06-01 10:04:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望创建一个干净的“智能”方法,它执行特定的操作而不传递参数。我有一些原则上可以工作的代码如下:

class Foo():
    def __init__(self, spam='spam', ham='ham'):
        self.spam = spam
        self.ham = ham

    def bar(self, arg):
        # spam operation
        if arg == self.spam:
            return self.spam*2
        # ham operation
        elif arg == self.ham:
            return self.ham*3

请注意,bar方法是为了对spam和{}执行不同的操作。执行此代码将返回:

^{pr2}$

不幸的是,我不得不使用foo两次来访问bar中的特定操作,这既尴尬又乏味。有没有一种更干净的Python式的方法可以在不传递参数的情况下得到相同的结果?例如,是否可以重载dot(.)运算符以获得相同的结果:

# Ideal 1
foo = Foo()
foo.bar.spam                          # bar knows to use spam operation
foo.bar.ham                           # bar knows to use ham operation    

甚至更好

# Ideal 2
foo = Foo()
foo.spam.bar                          # bar knows to use spam operation
foo.ham.bar                           # bar knows to use ham operation     

Tags: to方法代码self参数foousedef
1条回答
网友
1楼 · 发布于 2024-06-01 10:04:07

编辑:更新以参数化选项。在

以下是使用对象组合的方法:

class Pork(object):
    def __init__(self, name, mult):
        self.name = name
        self.mult = mult

    @property
    def bar(self):
        return self.name * self.mult

    def __repr__(self):
        return self.name

class Foo(object):
    def __init__(self, spam='spam', ham='ham'):
        self.spam = Pork(spam, 2)
        self.ham = Pork(ham, 3)

结果:

^{pr2}$

相关问题 更多 >