为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 print 在 python 中显示类实例

如何使用 print 在 python 中显示类实例

ABOUTYOU 2022-06-07 17:08:40
我正在尝试打印一个类的实例,但是我得到的结果似乎格式正确,但不是我正在寻找的输出。我已经按照某人的建议使用了 def str (self),但我仍然得到相同的结果这是整个代码: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 emp1global emp2global nglobal semp1 = ''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.pyz2Name :  z , Salary:  2Total Employee 1m5Name :  m , Salary:  5Total Employee 2[<__main__.Employee object at 0x0000022AFA278550>, <__main__.Employee object at 0x0000022AFA278550>]我正在尝试使用 for 循环中所做的更改打印出实例
查看完整描述

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]

希望这可以帮助!


查看完整回答
反对 回复 2022-06-07
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

这里有两点需要注意。

  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)']


查看完整回答
反对 回复 2022-06-07
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

添加__repr__将在您的类的实例传递到打印函数时运行的方法。

def __repr__(self) -> str:
    return f"employee<{name: {self.name}, salary: {self.salary}>"


查看完整回答
反对 回复 2022-06-07
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信