Инициирование класса со слишком малым количеством аргументов не вызывает ошибку - PullRequest
0 голосов
/ 07 января 2019

Я работаю с некоторыми .py файлами, и в одном есть класс, который начинается так:

file1.py

class SomeClass(object):
    def __init__(self, arg1="A", arg2="B", arg3="C"):

Затем в другом классе он инициализируется так:

file2.py

from file1 import SomeClass

someinstance = SomeClass("Z")

Я думаю, что что-то упустил, но не вижу, что, и это не так легко запустить и просто посмотреть, что происходит.

Таким образом, метод init SomeClass содержит три ключевых аргумента со значениями по умолчанию, но только один аргумент без ключевого слова задается при создании экземпляра класса. Это значение по умолчанию для arg1, которое будет переопределено экземпляром класса, подобным этому?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Так как в вашем классе нет positional-argument, поэтому он дает вам ошибку. Итак, есть два возможных решения,

Сначала передайте default-argument вот так,

someinstance = SomeClass(arg1 = "Z")

или

someinstance = SomeClass(arg2 = "Z")

или

someinstance = SomeClass(arg3 = "Z")

Во-вторых, решение состоит в том, чтобы сделать positional-argument в вашем классе,

class SomeClass(object):
    def __init__(self, arg, arg1="A", arg2="B", arg3="C"):

Теперь вы можете передать, как вы сделали в заявлении,

someinstance = SomeClass("Z")

Теперь, это не даст вам никакой ошибки.

0 голосов
/ 07 января 2019

Вы можете проверить, что он переопределяет первый аргумент

class SomeClass(object):
    def __init__(self, arg1="A", arg2="B", arg3="C"):
        self.arg1=arg1
        self.arg2=arg2
        self.arg3=arg3
        pass
someinstance = SomeClass("Z")#over rides the positional argument
someinstance.arg1

Так и надо сделать someinstance = SomeClass(arg3="Z")

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