Вопрос

This is my first program in Python and I'm working with some API which is used to log in or register user.

This is how my class looks like:

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!'

I tested this class with code below:

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

and I got output like this:

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

But when I change my test to this:

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

it'll do the thing and I'll get my output, but it'll execute that function two times.

I was thinking where the problem could be and I remembered that in JAVA you could get similar output when you forget about override toString(). Now, I've read about python equivalents: repr and str but firstly I don't know how to return data from methods (not self.apikey etc.) and secondly I'm not 100% sure that is the right way to get my output, not address.

Это было полезно?

Решение

If the problem is that you get the userregistration executed two times -- you execute it two times. Once in the __init__ and once explicitly.

Regarding returning from __init__ check SO "How to return a value from __init__ in Python?" :

__init__ returns the newly created object. You cannot (or at least shouldn't) return something else.

And besides, don't use the return value to indicate error - use exceptions:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top