会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132413个问题
Python 全系列/第一阶段:Python入门/控制语句 3796楼
Python 全系列/第一阶段:Python入门/序列 3797楼
Python 全系列/第一阶段:Python入门/序列 3798楼
Python 全系列/第一阶段:Python入门/序列 3799楼

遇到的问题:

一、使用装饰器时一开始没有设置私有属性,结果报错了,把属性变为私有属性才不会报错

二、运算符重载时当实例属性为一个时与多个时相加的问题

问题一的详细描述、代码和运行截图:

在做章节六的实操题第五题时,题目要求使用@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)

不加私有属性的截图:


image.png

image.png

加了私有属性的截图:

image.png

image.png

问题二的详细描述、代码和运行截图:

同样也是同样这题里的问题,要求重写__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__()方法,我在下面截图说明哪一段):

截图:

image.png

image.png

如我上面所提,a2+a3,只是简单的实现了name和salary的相加,这样的相加print和return就能完成,更希望显示的是     quanzo的薪水是:10000+quanzou的薪水是:20000 这样的效果。


最后一个小小小小问题:为啥这么多波浪线。。。。

Python 全系列/第一阶段:Python入门/面向对象 3802楼
Python 全系列/第一阶段:Python入门/序列 3805楼
Python 全系列/第一阶段:Python入门/控制语句 3810楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637