什么是错误?为什么?

时间:2018-01-13 20:44:46

标签: python python-3.6

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())

out put是:

  

追踪(最近一次通话):     文件" interface.py",第1行,in       类帐户(对象):     文件" interface.py",第30行,帐户       def set(self,user_name = self .__ user_name,user_id = self .__ user_id,user_no = self .__ user_no,password = self .__ password):   NameError:name' self'未定义

1 个答案:

答案 0 :(得分:0)

好的,明白了。 但还有另外一个我改变了代码。

  

这是一个具有任意数量的参数和关键字的装饰器   参数

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)
  

但是dset()函数总是返回None    *我认为任意关键字参数存在问题。通过在装饰器参数中使用** kargs,它变成了字典,再次通过** kargs它只返回该字典的值。*