Python 类方法不返回字典,而是返回实例本身

Python 类方法不返回字典,而是返回实例本身,python,Python,对于Python来说,这是一个相当新的问题,涉及到类实例。我有点像 class Headers: def login_headers(self): return { 'origin': 'address.com', 'accept-encodig': 'gzip, deflate, br', 'more': '...' } 在我的主文件中,我正在导入from headers import headers,并调用一个实例并将其分配给一个变量

对于Python来说,这是一个相当新的问题,涉及到类实例。我有点像

class Headers:
  def login_headers(self):
    return {
      'origin': 'address.com',
      'accept-encodig': 'gzip, deflate, br',
      'more': '...'
    }
在我的主文件中,我正在导入
from headers import headers
,并调用一个实例并将其分配给一个变量:

headers=headers()

但是当我想把字典拿出来时,它是这样的:

headers.login\u headers
它不返回字典,而是返回实例本身


我得到的打印输出是:
您缺少方法的parantises。您得到的是方法函数的地址,而不是方法本身。请尝试以下操作:

headers.login_headers()
因为这是一种方法

为使其不可调用,请使用decorator使其成为属性

class Headers:
    @property
    def login_headers(self):
        return {
            'origin': 'address.com',
            'accept-encodig': 'gzip, deflate, br',
            'more': '...'
        }
为了让它更具python风格,我建议使用这个方法并称之为合适的方法

class Headers:
    def __init__(self):
        self.login_headers = {
            'origin': 'address.com',
            'accept-encodig': 'gzip, deflate, br',
            'more': '...'
        }

    def get_login_headers(self):
        return self.login_headers

headers = Headers()
headers.get_login_headers()

在实例初始化中,您将指定
login\u headers
的默认值,如果您需要继承
headers
类,您可以覆盖
get\u login\u headers
,以匹配可能的更改。

实际调用login\u headers需要做的只是:

    headers = Headers()
    headers.login_headers()

login_headers是您定义为headers类的子函数,因此您只需像调用任何其他函数一样调用它。

来自Ruby世界,这是我一直关注的问题。
@property
是某种神奇的Python装饰器吗?该方法的行为是否与我执行
.login\u headers()
时的行为相同?不,在检索值时不需要调用它,它是某种惰性的求值属性。这有任何缺点,我不想让自己养成坏习惯。使用
@property
很好,还是我应该用
()
@supersize调用该方法?我已经用更具python风格的方式更新了答案。谢谢,我完全忽略了这一点