Может ли экземпляр класса принять аргумент? - PullRequest
0 голосов
/ 23 апреля 2020

Например, если я создаю класс Vocab и создаю его экземпляр с помощью:

vocab = Vocab(tokens)

Могу ли я использовать передачу аргумента, такого как символ, или списка списков символов? Как:

tokenslist = ['a','b','c']

result = vocab[tokenslist]

Любое дальнейшее чтение по этому вопросу будет оценено, спасибо.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Да. Это будет сделано в методе __init__(), который очень похож на конструктор.

Пример:


class MyTest:

    def __init__(self, arg1, arg2):
        #do stuff with the args
        pass

if __name__ == "__main__":
    mt = MyTest("foo", "bar")
0 голосов
/ 23 апреля 2020

Если вы хотите вызвать экземпляр класса (с (), а не []), вы можете определить __call__() для класса. Тогда его экземпляры будут вызываться, и вы можете передавать значения, как и любая другая функция:

class Vocab:
    def __init__(self, tokens):
        self.tokens = tokens

    def __call__(self, arg):
        print("instance called with ", arg)
        return list(zip(self.tokens, arg))


vocab = Vocab([1, 2, 3])

tokenslist = ['a','b','c']
result = vocab(tokenslist)
# result will be [(1, 'a'), (2, 'b'), (3, 'c')]
# prints "instance called with  ['a', 'b', 'c']"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...