Как я могу использовать входные данные в Python в качестве аргумента в Python - PullRequest
0 голосов
/ 13 октября 2019

Я просто тренируюсь для классов в Python и застрял здесь Вот мой код:

class Employee():
          def __init__(self,name):
               self.name = name

          def name(self):
               print(self.name)
e1 = Employee('Prashant')   #I m gonna to use them as an id of Employee
e2 = Employee('Vishal')
e3 = Employee('Harry')

a = input('Enter your Employee id')  #I am gonna use this as an argument

Employee.nameandage(a) #OR
a.name()

И здесь я получил свою ошибку как: -

AttributeError: 'str' object has no attribute 'first'

Просто я просто хочуспросить, могу ли я использовать str в качестве аргумента или нет .....

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Во-первых, интерпретатор python обрабатывает name как переменную name, которая является строкой, отличной от имени метода (). Просто измените имя функции с «name ()» на «get_name ()», и оно будет работать.

Во-вторых, вы вызываете метод name из входной строки, а не из объекта.

a = input('Enter your Employee id')
...
a.name()

Вот переписанная версия вашего кода (я не знаю, что вы хотитеделать с идентификатором, но вы можете изменить этот код, чтобы сделать именно то, что вы хотите). Я надеюсь, что это поможет вам

class Employee:
    def __init__(self, name):
        self.name = name

    def get_name(self):
        print(self.name)

e1 = Employee('Prashant')
e2 = Employee('Vishal')
e3 = Employee('Harry')


a = input('Enter your Employee Name: ')

e1.name = a
# OR
e4 = Employee(a)

# both print the employee name you entered as input, stored in a
e1.get_name() 
e4.get_name()
0 голосов
/ 13 октября 2019

Это не столько использование строки в качестве аргумента. Когда вы устанавливаете атрибуты класса, вы должны ссылаться на них в своем коде. Возьмите этот пример:

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age


employee_1 = Employee 

add_name = input('Enter name:> ')
add_age = int(input('Enter age:> '))
employee_1.name = add_name 
employee_1.age = add_age   

print('Employee name: ', employee_1.name, '\nEmployee age: ', employee_1.age)

Вывод:

Enter name:> John Smith
Enter age:> 40
Employee name:  John Smith 
Employee age:  40

Вам не нужно использовать input для установки информации. Вы можете просто установить его из переменной employee_1.

employee_1 = Employee('John Smith', 40)

Существует метод, использующий super(), где вы можете создать подкласс с дополнительными атрибутами, которые не влияют на класс Parent.

class Person1(Employee):  # passing the parent class through

    def __init__(self):
        self.email = 'JohnSmith@nowhere.com'
        super().__init__(name='John Smith', age=40)


employee = Person1()
employee_1 = Employee('John Doe', 20)
print('Employee name: ', employee.name, '\nEmployee age: ', employee.age, '\nEmployee email: ', employee.email)
print('Employee name: ', employee_1.name, '\nEmployee age: ', employee_1.age)

Вывод:

Employee name:  John Smith 
Employee age:  40 
Employee email:  JohnSmith@nowhere.com
Employee name:  John Doe 
Employee age:  20

Как видите, я мог бы добавить атрибут email без влияния на родительский класс, однако атрибуты из родительского класса были унаследованы.

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