Как использовать print для отображения экземпляров классов в python - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь напечатать экземпляры класса, однако я получаю результат, который, кажется, имеет правильный формат, но не является выводом, который я ищу.

Я использовал def str (самостоятельно), как кто-то рекомендует, но я все еще получаю тот же результат

Это весь код:

class Employee:

    empCount = 0
    def __init__(self,name,salary):
        self.name = name 
        self.salary = salary
        Employee.empCount += 1
    def __str__(self):
        print (self.name)
    def displayCount(self):
        print("Total Employee %d" % Employee.empCount)

    def displayEmployee(self):
        print ("Name : ", self.name, ", Salary: ",self.salary)
global emp1
global emp2
global n
global s
emp1 = ''
emp2 = ''
alist = [emp1,emp2]
alist_final =[]
for y in alist:
    y = Employee('n',2)
    alist_final.append(y)
    y.displayEmployee()
    print("Total Employee %d" % Employee.empCount)



print(alist_final)

Это результат, который я получаю в командной строке:

C:\Users\Demi\Desktop\virtuallearner>pr.py
z
2
Name :  z , Salary:  2
Total Employee 1
m
5
Name :  m , Salary:  5
Total Employee 2
[<__main__.Employee object at 0x0000022AFA278550>, <__main__.Employee object 
at 0x0000022AFA278550>]

Я пытаюсь распечатать экземпляры с изменениями, внесенными в цикл for

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Вместо использования метода __ str __ вы можете использовать метод __ repr __ .Используя этот метод, вам не нужно явно преобразовывать экземпляр в строку.Найдите код:

class Employee:
    empCount = 0
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1

    def __repr__(self):
        return self.name

    def displayCount(self):
        print("Total Employee %d" % Employee.empCount)

    def displayEmployee(self):
        print ("Name : ", self.name, ", Salary: ",self.salary)
global emp1
global emp2
global n
global s
emp1 = ''
emp2 = ''
alist = [emp1,emp2]
alist_final =[]
for y in alist:
    y = Employee('n',2)
    alist_final.append(y)
    y.displayEmployee()
    print("Total Employee %d" % Employee.empCount)
print(alist_final)

Вывод будет выглядеть так:

Name :  n , Salary:  2
Total Employee 1
Name :  n , Salary:  2
Total Employee 2
[n, n]

Надеюсь, это поможет!

0 голосов
/ 25 сентября 2019

Здесь следует отметить две вещи.

  1. Вы не вызывали str метод экземпляров.Скорее вы вызывали print для контейнера, который является alist_final, который является списком.

    print(somelist) вызовет метод str somelist, а не элементы в list

  2. Вы не возвращали строковое представление.Вместо этого вы вызывали его с print.

Вам необходимо return представление из метода __str__, который вы реализовали, например,

$ cat emp.py
class Employee:

    empCount = 0
    def __init__(self,name,salary):
        self.name = name 
        self.salary = salary
        Employee.empCount += 1

    def __str__(self):
        return '{}(name={}, salary={})'.format(
                        self.__class__.__name__,
                        self.name,
                        self.salary)

    def displayCount(self):
        print("Total Employee %d" % Employee.empCount)

    def displayEmployee(self):
        print ("Name : ", self.name, ", Salary: ",self.salary)


alist_final =[]
for _ in range(2):
    y = Employee('n',2)
    alist_final.append(y)
    y.displayEmployee()
    print("Total Employee %d" % Employee.empCount)

print([str(x) for x in alist_final])

Вывод:

$ python emp.py
('Name : ', 'n', ', Salary: ', 2)
Total Employee 1
('Name : ', 'n', ', Salary: ', 2)
Total Employee 2
['Employee(name=n, salary=2)', 'Employee(name=n, salary=2)']
...