有没有大佬解答下哪里有问题呀
w2686867532 发表于 2023-3-2 14:54感谢大佬 还有个问题是第8行我想添加area进实例的字典,为什么没有成功啊
你 print 的是 Room 这个类的字典,不是实例的字典
你在获取实例的 area 之后打印 r1 的字典就会发现其实已经成功了
class Lazyproperty:
def __init__(self, func):
self.func = func
def __get__(self, instance, owner):
if instance == None:
return self
res = self.func(instance)
setattr(instance, self.func.__name__, res)
return instance.area # 注意这行
class Room:
def __init__(self, name, width, length):
self.name = name
self.width = width
self.length = length
@Lazyproperty
def area(self):
return self.width * self.length
r1 = Room("客厅", 5, 4)
print(r1.area)
print(r1.__dict__) # 注意这里
print(Room.area)
守株待兔中 本帖最后由 歌者文明清理员 于 2023-3-2 11:09 编辑
你打印的 area 是一个方法(函数),而不是他的返回值
另外,要调用实例(就是你代码中的 r1)的方法,就是 r1.area(),而不是类的方法
要不然你得这样写
Room.area(r1)
class Lazyproperty:
def __init__(self, func):
self.func = func
def __get__(self, instance, owner):
if instance == None:
return self
res = self.func(instance)
setattr(instance, self.func.__name__, res)
return instance.area # 注意这行
class Room:
def __init__(self, name, width, length):
self.name = name
self.width = width
self.length = length
@Lazyproperty
def area(self):
return self.width * self.length
r1 = Room("客厅", 5, 4)
print(Room.__dict__)
print(r1.area)
print(Room.area)
isdkz 发表于 2023-3-2 11:10
感谢大佬 还有个问题是第8行我想添加area进实例的字典,为什么没有成功啊 歌者文明清理员 发表于 2023-3-2 11:07
你打印的 area 是一个方法(函数),而不是他的返回值
另外,要调用实例(就是你代码中的 r1)的方法,就 ...
方法area被描述符修饰了啊,应该不用括号吧
页:
[1]