此代码需要一些帮助
class Employee:
def __init__(self,name):
self.name = name
def greet(self,other):
print ("hello, %s" %(other)) <--- doubt
class CEO(Employee):
def greet(self,other):
print ("Get back to work, %s!" %(other)) <---- doubt
c1 = CEO("Emily")
e1 = Employee("bhargav")
c1.greet(e1)
e1.greet(c1)
我知道是否将突出显示的行中的变量更改为“ other.name”,我将获得所需的输出,如下所示。
Get back to work, bhargav!
hello, Emily
但是,如果我只是给“其他”生病,则会得到以下输出。
Get back to work, <__main__.Employee object at 0x0000021858C64FD0>!
hello, <__main__.CEO object at 0x0000021858C64F60>
你们能解释一下在打印语句中添加“ .name”的重要性吗?
答案 0 :(得分:0)
在这一行c1.greet(e1)
中,您要传递e1
,它是Employee类的Employee("bhargav")
对象。
因此,在打印"Get back to work, %s!" %(other)
时,您将尝试打印Employee类的对象,而不是该类的name属性。
如果要在每次尝试打印对象时都打印对象的name
属性,则可以覆盖__str__()
函数,并为对象提供自定义字符串表示形式。
类似这样的东西:
class Employee:
def __init__(self,name):
self.name = name
def __str__(self):
return self.name
def greet(self, other):
print("hello, %s" % other)
class CEO(Employee):
def __str__(self):
return self.name
def greet(self, other):
print("Get back to work, %s!" % other)
参考:https://www2.lib.uchicago.edu/keith/courses/python/class/5/#str
答案 1 :(得分:0)
执行c1.greet(e1)
时,e1
是e1 = Employee("bhargav")
,它是 Employee class 的对象。
因此,您得到的输出为Get back to work, <__main__.Employee object at 0x0000021858C64FD0>!
执行print(e1.name)
将打印bhargav
,而执行print(e1)
将仅打印Employee对象及其内存位置( 0x0000021858C64FD0 )。
要实现您要完成的任务,请在Employee类中使用dunder __str__
,如下所示:
class Employee:
def __init__(self,name):
self.name = name
def __str__(self):
return self.name
def greet(self,other):
print ("hello, %s" %(other)) #<--- doubt
class CEO(Employee):
def greet(self,other):
print ("Get back to work, %s!" %(other)) #<---- doubt
c1 = CEO("Emily")
e1 = Employee("bhargav")
c1.greet(e1)
e1.greet(c1)
输出:
Get back to work, bhargav!
hello, Emily
答案 2 :(得分:0)
如果要从类的对象返回结果,则需要声明它。 使用 repr (对于python2)或 str (对于python3和python2)。
class Employee:
def __init__(self,name):
self.name = name
def greet(self,other):
print ("hello, %s" %(other))
def __str__(self):
return (self.name)
class CEO(Employee):
def greet(self,other):
print ("Get back to work, %s!" %(other))
def __str__(self):
return ("self.name")
c1 = CEO("Emily")
e1 = Employee("bhargav")
c1.greet(e1)
e1.greet(c1)
现在这将显示所需的输出。