#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) в то время, когда директории не нужен никакой аргумент