#python
#python
Вопрос:
Вот MRE:
class Dog():
def __init__(self, action, name):
self.action = action
self.name = name
def name_dog(self):
my_name = input("give me a name: ")
return self.name(my_name)
def act_like_dog(self):
order = input("Tell me to do something: ")
msg = self.name " is " order
return self.action(msg)
def main(self):
self.name_dog()
self.act_like_dog()
Dog.main()
Основная цель вызова класса dog в этом случае заключается в том, чтобы пользователь вводил свои собственные значения (имя, действие) для класса. Таким образом, переменные для указанного мной класса ( Dog
class) получаются из вызова функции ( self.name_dog
and self.act_like_dog
) в main()
функции, которая предлагает пользователю ввести свой ввод. Однако, когда я попытался вызвать main()
функцию без self
, я получил сообщение об ошибке, в котором говорится, что требуется позиционный аргумент, в то время как если я вызвал функцию self()
, ошибка говорит, что self
она не определена. Как мне это исправить?
Комментарии:
1. Вам нужен экземпляр. Что-то вроде
Dog().main()
2. Что вы ожидаете сделать
self.name(my_name)
?3. И вам нужно будет передать
action
иname
как вDog('bark', 'fido')
, если вы не дадите им значения по умолчанию в__init(...)__
методе.4. @jarmod Разве это не помешает цели запроса пользователя?
5. Тогда было бы разумнее поместить подсказки в
__init__
…
Ответ №1:
Вы, кажется, запутались в нескольких элементах.
Вам нужно создать фактический экземпляр класса, чтобы иметь возможность классифицировать его методы — Dog(...)
. Помимо этого, существует логическая проблема, когда вы ожидаете создать экземпляр с name
помощью and action
, но затем принимаете их в качестве входных данных от пользователя. Я думаю, что вам нужно просто установить атрибуты с помощью пользовательского ввода в __init__
. Что-то вроде:
class Dog():
def __init__(self):
self.name = self.name_dog()
self.action = self.act_like_dog()
def name_dog(self):
my_name = input("give me a name: ")
return my_name
def act_like_dog(self):
order = input("Tell me to do something: ")
msg = self.name " is " order
return msg
dog = Dog()
Если вы хотите иметь возможность изменять name
и action
позже, вы можете использовать свою main
идею:
class Dog():
def __init__(self):
main()
...
def main():
self.name = self.name_dog()
self.action = self.act_like_dog()
dog = Dog()
Комментарии:
1. Разве мы не можем поместить все эти функции в одну основную функцию? Поэтому, когда мы вызываем основную функцию, name_dog и act_like_dog также будут вызваны.
Ответ №2:
Возможно, вы ищете что-то вроде этого:
class Dog:
def __init__(self, action=None, name=None):
if name:
self.name = name
else:
self.name = input("Dog's name: ")
if action:
self.action = action
else:
self.action = input("Dog's action: ")
d = Dog()
# ... or ...
d = Dog("Max", "Bark")
# ... or ...
d = Dog("Max")
d = Dog(name="Max")
# ... or ...
d = Dog(action="Bark")