什么是错误?为什么?

2024-07-05 14:12:08 发布

您现在位置:Python中文网/ 问答频道 /正文

class account(object):

    __duser_id = ''
    __duser_name =''
    __duser_no = ''

    def __init__(self, default, entry_name, password, user_id='', user_name='', user_no=''):
        if type(default) != bool:
            raise Exception("Error 0x1: type(default) is boolean ")
        if default == False:
            self.__user_id = user_id
            self.__user_name = user_name
            self.__user_no = user_no
        else:
            self.__user_id = __duser_id
            self.__user_name = __duser_name
            self.__user_no = __duser_no
        self.__entry_name = entry_name
        self.__password = password

    def dset(self, duser_id=__duser_id, duser_name=__duser_name, duser_no=__duser_no):
        __duser_id = duser_id
        __duser_name = duser_name
        __duser_no = duser_no
        return (__duser_id, __duser_name, __duser_no)

    def dget(self):
        return (__duser_id, __duser_name, __duser_no)

    def set(self, user_name=self.__user_name, user_id=self.__user_id, user_no=self.__user_no, password=self.__password):
        self.__user_id = user_id
        self.__user_name = user_name
        self.__user_no = user_no
        self.__password = password
        return (self.__user_id, self.__user_name, self.__user_no, self.password)

    def get(self):
        return (self.__user_id, self.__user_name, self.__user_no, self.password)

if __name__ == '__main__':
    gmail = account(default=True, entry_name='gmail', password='pass***')
    print(gmail.dget())
    print(gmail.get())

输出为:

Traceback (most recent call last): File "interface.py", line 1, in class account(object): File "interface.py", line 30, in account def set(self, user_name=self.__user_name, user_id=self.__user_id, user_no=self.__user_no, password=self.__password): NameError: name 'self' is not defined


Tags: nonameselfiddefaultreturnifdef
1条回答
网友
1楼 · 发布于 2024-07-05 14:12:08

好的,我明白了。 但还有一个我刚改了密码。你知道吗

This is a decorator with arbitrary number of arguments and keyword arguments

def user_no_is_number(func):
    def wrapper(*args, **kargs):
        if 'user_no' in kargs:
            if type(kargs['user_no']) != int:
                raise Exception('Error 1x0: user_no must contains only numbers.')
            else:
                return func(*args, **kargs)
    return wrapper

    @staticmethod
    @user_no_is_number
    def dset(user_id=None, user_name=None, user_no=None):
        if user_id:
            account.__duser_id = user_id
        if user_name:
            account.__duser_name = user_name
        if user_no:
            account.__duser_no = user_no
        return (account.__duser_id, account.__duser_name, account.__duser_no)

but the dset() function return always None *I think there is problem with arbitrary keywords parameters. by using **kargs in decorator parameter it becomes dictionary and by again passing **kargs it just return values of that dictionary.*

相关问题 更多 >