【问题标题】:Call a python variable that runs a function which returns a variable for the original python variable调用运行函数的 python 变量,该函数返回原始 python 变量的变量
【发布时间】:2015-09-04 19:06:42
【问题描述】:

我正在尝试创建一个变量,当我调用或使用该变量时,它会运行一个函数来执行某些操作并返回某个变量。一个例子会更有意义:

def establish_client():
    a = None
    if True:
        a = 'A'
    return a


>>> print establish_client
'A'

可以这样做吗?基本上有没有一种方法可以运行一个方法并在不使用括号的情况下返回一些东西?

【问题讨论】:

  • 在您的项目中添加一组空括号是否有问题...?
  • 最终我要做的是创建一个全局常量,每次调用它时都会检查一个连接是否存在,如果它确实返回连接对象。我想将它保存在一个变量中,而不是每次都调用该函数
  • 你为什么不能每次都简单地做global = method()?

标签: python dynamic properties decorator


【解决方案1】:

注意:以下是一个 hack,可能有很多不这样做的充分理由。


您可以使用class 和__str__() 方法在该行上实现某些目标:

class foo:
    def __init__(self):
        pass
    def __str__(self):
        a = None
        if True:
            a = 'A'
        return a

测试:

>>> f=foo()
>>> print(f)
'A'
>>>

注意:它仅适用于将参数显式视为字符串的打印和函数。

例如,如果要将其字符串值分配给另一个变量,则必须使用str(f),因此最终使用括号。

【讨论】:

    【解决方案2】:

    一般情况下:没有。

    但有些技术可能会接近。

    属性允许对对象中的成员进行类似的操作。

    class Demo(object):
        @property
        def establish_client(self):
            a = None
            if True:
                a = 'A'
            return a
    
    d = Demo()
    print d.establish_client
    

    但属性不适用于局部或全局变量。

    您还可以使用__str__ 进行字符串转换,但这仅在您仅需要此行为时才有效,当变量以将其转换为字符串的方式使用时。通常情况并非如此。有关如何执行此操作,请参阅 mescalinum 答案。

    【讨论】:

    • 有那么一刻,我认为一个疯狂的 hack 猴子修补模块 __getattr__ 或 __getattribute__ 可能会起作用。但似乎 cpython 不支持 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多