Ошибка доступа к переменной экземпляра класса Python - PullRequest
0 голосов
/ 04 октября 2018

Я получаю сообщение об ошибке при доступе к переменной экземпляра класса и назначении их.Когда я использую функцию форматирования для преобразования значения переменной экземпляра, это работает хорошо.

Код, который выдает ошибку:

task.update({
    'email': self.email,

Ошибка

raise ValueError('Unknown protobuf attr type', type(val))
ValueError: ('Unknown protobuf attr type', <class 'tuple'>)

Код, который работает при использовании функции форматирования:

logger.log_text('email {}'.format(self.email))

Созданиеэкземпляр класса

user = User(post_data)
user.create()

Класс

class User(object):
""" User Model for storing user related details """
__tablename__ = 'Users'

def __init__(self, data, admin=False):
    bcrypt = Bcrypt()
    self.email = data.get('email'),
    self.password = bcrypt.generate_password_hash(
        data.get('email'), 12
    ).decode()
    self.is_admin = admin
    self.firstname = "firstname"
    self.middlename = "middlename"
    self.lastname = "lastname"
    self.address = "address"
    self.is_active = True
    self.ds = datastore.Client()

def create(self):
    """
    Create User
    :return: string
    """
    logger.log_text("create user")
    with self.ds.transaction():
        incomplete_key = self.ds.key(self.__tablename__)
        task = datastore.Entity(key=incomplete_key)
        task.update({
            'email': self.email,
            'password': '{}'.format(self.password)
        })
        self.ds.put(task)

1 Ответ

0 голосов
/ 04 октября 2018

Это очень простая ошибка: в этой строке есть запятая:

self.email = data.get('email'),

, которая превращает self.email в кортеж.Например:

>>> a = 'hi'
>>> type(a)
<class 'str'>
>>> b = 'hi',
>>> type(b)
<class 'tuple'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...