Почему я должен указывать аргумент при доступе к print(dir(instance.function(‘hello’))) в нашем объекте на python?

#python #python-3.x #python-2.7 #oop #directory

#python #python-3.x #python-2.7 #ооп #каталог

Вопрос:

давайте рассмотрим приведенный ниже пример

 class car():
    def car_type(self,car_name):
        return f'its an electric car and its a {car_name}'
instance=car()
print(instance.car_type('BMW'))
print(dir(car()))
print(dir(instance.car_type('hello')))
  

если вы внимательно посмотрите на вышеупомянутый код, вы обнаружите, что я пытался получить доступ к каталогу instance.car_type, используя этот оператор print(dir(instance.car_type('hello')))
и, например, если вы удалите ‘hello’ из этого оператора, он выдаст ошибку

 TypeError: car_type() missing 1 required positional argument: 'car_name'
  

итак, чтобы избежать этой ошибки, я сначала жестко использую тот же аргумент ‘BMW’, который я использовал ранее при вызове метода этого класса, и ошибка исчезла, и когда я попытался изменить аргумент ‘BMW’ на любое случайное слово, например, ‘hello’, ошибка исчезла, но почему это произошло, мне до сих пор неизвестно.

и что меня больше всего удивило, так это то, что когда я не давал никакой переменной моей функции car_type, как указано ниже, я все еще мог получить доступ к каталогу instance.car_type без каких-либо аргументов.

 class car():
    def car_type(self):
        return 'its an electric car and its a'
instance=car()
print(instance.car_type())
print(dir(car()))
print(dir(instance.car_type()))
  

Комментарии:

1. Чего вы пытаетесь достичь? instance.car_type вернет строку, если задан допустимый аргумент, и вызов dir() этой строки вернет список свойств строковых объектов. Но неясно, какова ваша цель здесь.

2. О, вы правы, что если я вызову print(dir(instance.car_type())), это даст мне список каталогов там. Единственная путаница, с которой я сталкиваюсь, заключается в том, что когда я добавляю переменную car_name в >>>def car_type(self, car_name): компилятор просит меня указать аргумент >>(dir(instance.car_type(‘hello’))), эта строка тоже почему? а также, если я изменяю ‘hello’ на любую случайную строку слова ‘BMW’, она все еще работает и выдает мне список каталогов, но нужен ли этой строке какой-либо параметр на 1-м месте, когда это не влияет на наш вывод.

Ответ №1:

Если вы не укажете аргумент, компилятор не сможет скомпилировать код.

параметр car_name: def car_type(self, car_name) нуждается в аргументе при вызове метода: instance.car_type(???)

Комментарии:

1. Да, это правда, что код не будет работать, если я не дам аргумент при вызове >>print(instance.car_type(‘BMW’)) но это не мой вопрос, моя жалоба связана со строкой >>print(dir(instance.car_type())) . итак, в этой строке, когда мне нужен каталог, почему этот компилятор просит меня указать аргумент так же, как >>(dir(instance.car_type(‘hello’)) )) или любое другое слово вместо ‘BMW’ почему этой строке нужен какой-либо аргумент на 1-м месте, когда это не влияет на наш вывод, а также когда в строке нет аргумента >>def car_type(self): like (self, car_type) в то время, когда директории не нужен никакой аргумент