Prashant
Prashant

Reputation: 1

How can i use input data in python as an argument in python

I am just Practising for Classes in python and stuck here Here, My code:

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()

And here I Got my error as:-

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

Simply I just want to ask that if I can use str as an argument or not.....

Upvotes: 0

Views: 169

Answers (2)

Barb
Barb

Reputation: 437

It is not so much using a string as an argument. When you are setting attributes of a class you need to reference them in your code. Take this example:

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)

Output:

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

You do not have to use an input to set the information. You can simply set it from the variable employee_1.

employee_1 = Employee('John Smith', 40)

There is a method using super() where you can create a subclass with extra attributes that wont affect the Parent class.

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

    def __init__(self):
        self.email = '[email protected]'
        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)

Output:

Employee name:  John Smith 
Employee age:  40 
Employee email:  [email protected]
Employee name:  John Doe 
Employee age:  20

As you can see I could add the attribute email without the Parent Class being affected however the attributes from the Parent Class were inherited.

Upvotes: 0

Sorin Dragan
Sorin Dragan

Reputation: 540

Firstly, python interpreter treats 'name' as the variable 'name' that is a string other than the method name(). Just change the name of the function from "name()" to "get_name()" and it will work.

Secondly, you are calling the name method from the input str, not from the object.

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

Here is a rewritten version of your code (I don't know what you want to do with the id, but you can change this code to do exactly what you want). I hope it will help you

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()

Upvotes: 2

Related Questions