Вы не можете вызвать __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