为什么python类的对象返回地址而不是返回数据?

时间:2013-08-18 22:49:43

标签: python class object repr

这是我在Python中的第一个程序,我正在使用一些用于登录或注册用户的API。

这就是我班级的样子:

class MyClass:
    ...
    def __init__(self, apikey, gameid, securitykey, responseformat, 
                 username=None, password=None, email=None)
        self.apikey = apikey
        self.gameid = gameid
        self.securitykey = securitykey
        self.responseformat = responseformat

        if username and password:
            self.userlogin(username,password)
        if username and password and email:
            self.userregistration(username, password, email)

    ''' And there are function userlogin and userregistration
    i'll show just one of them '''

    def userregistration(self, username, password, email):
        securitypayload = self.buildurl(username, password, email)
        user = requests.get('url', params = securitypayload)
        if 'error' in user.text:
            return user.text
        else:
            return 'Success!'

我用下面的代码测试了这个类:

api_test = MyClass('apikeyadfasdf', 'gameiddfdfd', 'seckey34324324', 'JSON', 
                    'admin', 'pass1')
print(api_test)

我的输出如下:

<package1.package2.file_name.MyClass object at 0x7f278388b48>

但是当我把测试改为:

api_test = MyClass('apikeyadfasdf', 'gameiddfdfd', 'seckey34324324', 'JSON', 
                    'admin', 'pass1')
data = api_test.userregistration(username, password, email)
print(data)

它会做的,我会得到我的输出,但它会执行该功能两次。

我在想问题可能在哪里,我记得在JAVA中,当你忘记覆盖toString()时,你可以得到类似的输出。现在,我已经阅读了python等价物: repr str 但首先我不知道如何从方法(不是self.apikey等)返回数据,其次我不是100%确定这是获得输出的正确方法,而不是地址。

1 个答案:

答案 0 :(得分:1)

如果问题是你执行了两次userregistration - 你执行两次。进入__init__后一次明确。

关于从__init__返回,请检查SO“How to return a value from __init__ in Python?”:

  

__ init__返回新创建的对象。你不能(或至少不应该)返回别的东西。

此外,不要使用返回值来表示错误 - 使用例外: