3 回答

TA貢獻1995條經驗 獲得超2個贊
您可以使用 __repr__ 方法,而不是使用__str__方法。使用此方法,您無需將實例顯式轉換為字符串。找到代碼:
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]
希望這可以幫助!

TA貢獻1860條經驗 獲得超9個贊
這里有兩點需要注意。
您沒有調用
str
實例的方法。相反,您正在調用print
容器,即alist_final
,它是一個列表。print(somelist)
將調用 str 方法somelist
,而不是list
您沒有返回字符串表示形式。取而代之的是,您使用
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)']

TA貢獻1817條經驗 獲得超6個贊
添加__repr__
將在您的類的實例傳遞到打印函數時運行的方法。
def __repr__(self) -> str: return f"employee<{name: {self.name}, salary: {self.salary}>"
添加回答
舉報