Python中的类和对象(对象覆盖)

时间:2019-01-09 06:49:49

标签: python

此代码需要一些帮助

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”的重要性吗?

3 个答案:

答案 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)时,e1e1 = 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)

现在这将显示所需的输出。