【问题标题】:Unable to get value from a getter method [closed]无法从 getter 方法中获取价值 [关闭]
【发布时间】:2019-09-19 01:59:23
【问题描述】:

我刚开始学习 Python。由于一些性能问题,我必须在我的一个 AWS Lambda 函数中将所有代码从 Java 切换到 Python。我正在使用 lambda 控制台提供的 IDE。

目前,我对 Python 中的类有点困惑。我阅读了许多教程,我认为我在 setter 和 getter 方法上所做的事情是正确的。这是我的代码:

class User:
    def __init__(self, user):
        self.username = user

    def get_username(self):
        return self.username

    def set_username(self, user):
        self.username = user

def lambda_handler(request, context):
    user = User("thisisaname")
    print("name of user is " + user.get_username)
    user.set_username("whatever")
    print("name of user is " + user.get_username)
    return "executed"

当 lambda_handler 被调用时,我期望输出是

name of user is thisisname
name of user is whatever

但是,当我打印 user.get_username 的值时。抛出类型错误。我得到以下错误消息:

{   "errorMessage": "can only concatenate str (not \"method\") to str",   "errorType": "TypeError",   "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 28, in lambda_handler\n    print(\"name of user is \" + user.get_username)\n" ] }

当我用 str(user.get_username) 包装它时,会打印方法描述。

name of user is <bound method User.get_username of <lambda_function.User object at 0x7f4d6a4cc4d0>> 
name of user is <bound method User.get_username of <lambda_function.User object at 0x7f4d6a4cc4d0>>

【问题讨论】:

标签: python python-3.x


【解决方案1】:

您没有调用 getter 方法。改成:

print("name of user is " + user.get_username())

话虽如此,Python 习惯上没有 Java 中的 getter 和 setter。 Pythonic 方法是使用 @property 装饰器。详情请见this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2021-08-22
    • 2017-09-07
    相关资源
    最近更新 更多