在此代码段中,重写__get__
类的Book
方法会改变在调用BookManager
时在Book
中返回的内容。
如果覆盖__get__
以返回命令,则book_1
是dict
。在book_2
的{{1}}中定义的__init__
返回BookManager
的实例,并且不是字典。
如果我注释了Book
类中的__get__
,则Book
内的book_1
和book_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')