为什么在Python中覆盖类的__get__方法会影响返回的内容?

时间:2019-04-05 11:51:43

标签: python class oop

在此代码段中,重写__get__类的Book方法会改变在调用BookManager时在Book中返回的内容。

如果覆盖__get__以返回命令,则book_1dict。在book_2的{​​{1}}中定义的__init__返回BookManager的实例,并且不是字典

如果我注释了Book类中的__get__,则Book内的book_1book_2都将成为BookManager的实例。

有人可以解释此行为的根本原因吗?

Book

输出

class Book:
  def __init__(self, name):
    self.name = name

  def __get__(self, instance, owner):
    return {'name': self.name}


class BookManager:
  book_1 = Book('python') # a dict is returned

  def __init__(self, book_name):
    self.book_2 = Book(book_name) # an instance of the object is returned


class Library:
  def __init__(self):
    self.book_manager = BookManager('javascript')

0 个答案:

没有答案