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

时间:2018-02-25 10:59:35

标签: python

对于类实例的问题,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_headers它不会返回字典,而是返回实例本身。

我得到的打印输出是:<bound method Headers.login_headers of <headers.Headers instance at 0x10e1d4488>

为什么不返回字典?

3 个答案:

答案 0 :(得分:3)

因为是一种方法。

因为它不可调用,所以使用@property装饰器使其成为属性。

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

因为它更加pythonic,我建议使用方法并称之为适当

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_headers,如果您需要继承Headers课程,则可以覆盖get_login_headers以匹配可能的更改。

答案 1 :(得分:1)

你错过了方法的parantheses。您将获取方法函数的地址而不是方法本身。请尝试以下方法:

headers.login_headers()

答案 2 :(得分:1)

实际调用 login_headers所需要做的只是:

    headers = Headers()
    headers.login_headers()

login_headers是一个你已经定义为Headers类子节点的函数,所以你只需要像任何其他函数一样调用它。