鱼C论坛

 找回密码
 立即注册
查看: 1705|回复: 3

[已解决]类对象属性问题

[复制链接]
发表于 2020-8-4 19:43:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. <div>import time as t</div><div>class Time():
  2.     def _init_(self):
  3.         self.unit = ['年','月','日','时','分','秒']
  4.         self.prompt='未开始计时'
  5.         self.lasted=[]
  6.         self.begin=0
  7.         self.end=0
  8.         
  9.     def _str_(self):
  10.         return self.prompt
  11.    
  12.     _repr_ = _str_</div><div>    def _add_(self,other):
  13.         prompt='总共运行了'
  14.         result=[]
  15.         for index in range(6):
  16.             result.append(self.lasted[index]+other.lasted[index])
  17.             if result[index]:
  18.                 prompt+=(str(result[index])+self.unit[index])
  19.         return prompt
  20.    
  21.    
  22.     #开始计时
  23.     def start(self):
  24.         self.begin=t.localtime()
  25.         self.prompt='请先调用stop()停止计时'
  26.         print('计时开始')
  27.         
  28.     #停止计时
  29.     def stop(self):
  30.         if not self.begin:
  31.             print('请先调用start()开始计时')
  32.         else:
  33.             
  34.             self.end=t.localtime()
  35.             self._calc()
  36.             print('计时结束')
  37.         
  38.     #内部方法,计算时间
  39.     def _calc(self):
  40.         self.lasted=[]
  41.         self.prompt="总共运行了"
  42.         for index in range(6):
  43.             self.lasted.append(self.end[index]-self.begin[index])
  44.             if self.lasted[index]:
  45.                 self.prompt +=(str(self.lasted[index])+self.unit[index])
  46.         #为下一轮计时初始化
  47.         self.begin=0
  48.         self.end=0
  49. </div>
复制代码
结果:
=======================
>>> q=Time()
>>> q.start()
计时开始
>>> q.stop()
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    q.stop()
  File "E:\python\程序\44_计时器.py", line 39, in stop
    self._calc()
  File "E:\python\程序\44_计时器.py", line 49, in _calc
    self.prompt +=(str(self.lasted[index])+self.unit[index])
AttributeError: 'Time' object has no attribute 'unit'
>>>
在最开始不是有初始化self.unit = ['年','月','日','时','分','秒']吗?
为什么他还会报错说“Time”对象没有“unit”属性 ?

最佳答案
2020-8-4 19:55:23
  1. def __init__()
复制代码

双下划线
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-4 19:55:23 | 显示全部楼层    本楼为最佳答案   
  1. def __init__()
复制代码

双下划线
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 20:30:42 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-8-4 20:32 编辑
  1. import time as t
  2. class Time:
  3.     def __init__(self):
  4.         self.unit = ['年','月','日','时','分','秒']
  5.         self.prompt='未开始计时'
  6.         self.lasted=[]
  7.         self.begin=0
  8.         self.end=0
  9.         
  10.     def __str__(self):
  11.         return self.prompt
  12.    
  13.     __repr__ = __str__
  14.     def __add__(self,other):
  15.         prompt='总共运行了'
  16.         result=[]
  17.         for index in range(6):
  18.             result.append(self.lasted[index]+other.lasted[index])
  19.             if result[index]:
  20.                 prompt+=(str(result[index])+self.unit[index])
  21.         return prompt
  22.    
  23.    
  24.     #开始计时
  25.     def start(self):
  26.         self.begin=t.localtime()
  27.         self.prompt='请先调用stop()停止计时'
  28.         print('计时开始')
  29.         
  30.     #停止计时
  31.     def stop(self):
  32.         if not self.begin:
  33.             print('请先调用start()开始计时')
  34.         else:
  35.             
  36.             self.end=t.localtime()
  37.             self._calc()
  38.             print('计时结束')
  39.         
  40.     #内部方法,计算时间
  41.     def _calc(self):
  42.         self.lasted=[]
  43.         self.prompt="总共运行了"
  44.         for index in range(6):
  45.             self.lasted.append(self.end[index]-self.begin[index])
  46.             if self.lasted[index]:
  47.                 self.prompt +=(str(self.lasted[index])+self.unit[index])
  48.         #为下一轮计时初始化
  49.         self.begin=0
  50.         self.end=0
复制代码

1.魔方方法都是双下划线
2.Time后面不用括号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 20:36:50 | 显示全部楼层
初始化函数__init__
重载运算符函数__add__
还有属性描述函数__repr__
以上这三个函数都是魔法函数,两侧都是双下划线。
注意:类的很多魔法函数都是双下划线

  1. import time as t
  2. class Time():
  3.     def __init__(self):
  4.         self.unit = ['年','月','日','时','分','秒']
  5.         self.prompt='未开始计时'
  6.         self.lasted=[]
  7.         self.begin=0
  8.         self.end=0
  9.         
  10.     def _str_(self):
  11.         return self.prompt
  12.    
  13.     __repr__ = _str_
  14.     def __add__(self,other):
  15.         prompt='总共运行了'
  16.         result=[]
  17.         for index in range(6):
  18.             result.append(self.lasted[index]+other.lasted[index])
  19.             if result[index]:
  20.                 prompt+=(str(result[index])+self.unit[index])
  21.         return prompt
  22.    
  23.    
  24.     #开始计时
  25.     def start(self):
  26.         self.begin=t.localtime()
  27.         self.prompt='请先调用stop()停止计时'
  28.         print('计时开始')
  29.         
  30.     #停止计时
  31.     def stop(self):
  32.         if not self.begin:
  33.             print('请先调用start()开始计时')
  34.         else:
  35.             
  36.             self.end=t.localtime()
  37.             self._calc()
  38.             print('计时结束')
  39.         
  40.     #内部方法,计算时间
  41.     def _calc(self):
  42.         self.lasted=[]
  43.         self.prompt="总共运行了"
  44.         for index in range(6):
  45.             self.lasted.append(self.end[index]-self.begin[index])
  46.             if self.lasted[index]:
  47.                 self.prompt +=(str(self.lasted[index])+self.unit[index])
  48.         #为下一轮计时初始化
  49.         self.begin=0
  50.         self.end=0
复制代码


另外,为什么你发的代码中总会带有<div>标记呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表