__init __ () отсутствует позиционный аргумент при вызове класса - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь выяснить, почему в init () отсутствует один аргумент, в этом случае скорость, когда в строке было дано 3 аргумента plane = Mywork.__init__( 'boeing', 747, 890)

Вот полный код, я полагаю, что я не сделал что-то правильно с первым аргументом, просто записанным в виде строки и не определяющим это где-либо, даже если я использовал str ?

Все, что я хочу, чтобы это произошло для кода выполнить def str и запустить.

Код:

class Mywork(object):

    def __init__(self, manufacturer, model, speed): #Aircraft
        self.manufacturer = manufacturer
        self.model = model
        self.speed = speed

    def __str__(self):
        return 'This is a {self.manufacturer} {self.model}'.format(self=self)

    def run(self):
        print('Works')
        print(self.__str__())

plane = Mywork.__init__( 'boeing', 747, 890)

if __name__ == '__main__':
    Mywork()

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Вы не можете вызвать __init__ напрямую, не создав предварительно экземпляр для передачи в качестве первого аргумента. Следующее является законным, хотя никто никогда не будет писать код, подобный этому:

plane = Mywork.__new__(Mywork, 'boeing', 747, 980)
Mywork.__init__(plane, 'boeing', 747, 980)

То, что вы хотите , почти наверняка

class Mywork(object):
    ...

plane = Mywork('boeing', 747, 890)
...

Вы также этого не делаете действительно когда-либо звоните __str__ явно; вы позволяете str делать это, когда экземпляр вашего класса передается в качестве аргумента.

print(self.__str__())  # No!
print(str(self))  # Better
print(self)  # Best; print() already calls str as necessary to convert its arguments
0 голосов
/ 03 марта 2020
if __name__ == '__main__':
    plane = Mywork('boeing', 747, 890)
    print(plane)

ВЫХОД:

>>This is a boeing 747
...