Как использовать метод для атрибута класса в Python3? - PullRequest
0 голосов
/ 06 августа 2020

Я хочу иметь возможность использовать методы (такие как .upper () или .lower ()) для атрибута класса. Например, в приведенном ниже коде:

class Player:
    def __init__(self, score,):
        self.score = score
        self.username = str(self)
        self.password = str((self.upper()))
        
player1 = Player(0)
print(player1.password)

Я ожидаю, что оператор печати выведет «PLAYER1», но вместо этого я получаю

AttributeError: 'Player' object has no attribute 'upper'

Ответы [ 3 ]

1 голос
/ 06 августа 2020

Self - это имя переменной, представляющее экземпляр класса. Это параметр для ссылки на текущий объект класса. Используя его, мы можем получить доступ к параметрам и методам класса.

Причина, по которой вам нужно использовать self, состоит в том, что Python не использует синтаксис @ для ссылки на атрибуты экземпляра.

Примечание: вы можете назвать эту переменную как угодно. Но это должен быть первый параметр. Например:

class Player:
    def__init__(myclassobj, score):
        myclassobj.score = score
        myclassobj.username ...
        ...
        ...

Вы получаете сообщение об ошибке:

AttributeError: 'Player' object has no attribute 'upper'

, потому что, когда вы говорите self.upper, он ищет атрибут в экземпляре класса, а вы не определили ни одного верхний атрибут.

В приведенном ниже коде:

self - это объект для указания экземпляра класса метода. И оценка не может использоваться с .upper, поскольку она имеет целочисленный тип.

class Player:
    def __init__(self, score,):
        self.score = score
        self.username = str(score)
        self.password = str((score.upper()))
        
player1 = Player(0)
print(player1.password)

По моему мнению, это должно быть:

class Player:
    def __init__(self, score, username, password):
        self.score = score
        self.username = str(username)
        self.password = str((password.upper()))
        
player1 = Player(0, 'ABC', 'abc@123')
print(player1.password)
0 голосов
/ 06 августа 2020

Это потому, что вы вызываете сам объект, а не имя объекта. Upper () - это метод для строки, поэтому он не будет выполняться на self

0 голосов
/ 06 августа 2020

Вы можете добавить атрибуты в класс, чтобы при вводе пользователем своего имени пользователя и пароля. Это строка. Затем вы можете использовать метод .upper ().

class Player:
    def __init__(self, username, password, score,):
        self.score = score
        self.username = username.upper()
        self.password = password.upper()
        
player1 = Player("tom", "abcd1234",0)

print(player1.username)
print(player1.password)

Вывод:

TOM
ABCD1234
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...