遇到的问题:
一、使用装饰器时一开始没有设置私有属性,结果报错了,把属性变为私有属性才不会报错
二、运算符重载时当实例属性为一个时与多个时相加的问题
问题一的详细描述、代码和运行截图:
在做章节六的实操题第五题时,题目要求使用@property设置属性的get与set方法,最开始是正常敲代码,当全部敲完运行时,报了个RecursionError: maximum recursion depth exceeded in comparison的错误,度娘了一下, 说是什么递归超过了范围,翻了几篇帖子,没有什么思路。然后我去翻课程ppt,结果发现实例属性在ppt上是私有属性,回到我自己写的代码上,把私有属性加上,结果没报错,还打印出正确结果来了。我想请教老师的是:1.为什么加个私有属性就不会报错了呢?2.不加私有属性的时候RecursionError: maximum recursion depth exceeded in comparison这个错误又是怎么来的呢?
代码(加了私有属性):
class Employee:
id_ = 1000
def __init__(self,name,salary):
self.__name = name
self.__salary = salary
Employee.id_ = Employee.id_ + 1
def __add__(self,other):
if isinstance(other,Employee):
return '{}的薪水是{}'.format(self.__name,self.__salary)
else:
return '不是同类对象,不能相加!!'
@property
def salary(self):
return self.__salary
@salary.setter
def salary(self,salary):
if 1000<salary<50000:
self.__salary = salary
else:
print('录入错误!薪水在1000-50000这个范围')
a1 = Employee('quanz',5000)
a2 = Employee('quanzo',10000)
a3 = Employee('quanzou',20000)
p = a2+a3
print(p)
print(a1.salary)
a1.salary = 2000
print(a1.salary)
不加私有属性的截图:


加了私有属性的截图:


问题二的详细描述、代码和运行截图:
同样也是同样这题里的问题,要求重写__add__方法,实现两个对象的相加,这个课程中讲过,
代码为:
class Person:
def __init__(self,name):
self.name = name
def __add__(self,other):
if isinstance(other,Person):
return "{}-{}".format(self.name,other.name)
else:
return "不是同类对象,不能相加"
p1 = Person('quanz')
p2 = Person('邹权')
x = p1 + p2
print(x)
上面的代码为之前课程讲过的__add__()重写,实现了简单的对象相加,print的结果为:quanz-邹权。可以注意到实现属性只有一个name,可以实现可以name对象+name对象。
回到我有疑问的这道题目的__add__()方法相加,这道题有两个实例属性,一个name一个salary,貌似不能加为name+salary,因为这只是一个对象里属性的相加,用print或者return就能实现这样的效果,我的问题是:这有两个属性的要怎么相加呢?(自己的想法是name1的salary是:xxx + name2的salary是:xxx 这样的相加,或许还有更好的相加方法,希望老师能够给些建议)
代码(就是问题一代码里的__add__()方法,我在下面截图说明哪一段):
截图:


如我上面所提,a2+a3,只是简单的实现了name和salary的相加,这样的相加print和return就能完成,更希望显示的是 quanzo的薪水是:10000+quanzou的薪水是:20000 这样的效果。
最后一个小小小小问题:为啥这么多波浪线。。。。