鸭子类型:
class Nstr(str):
def __sub__(self,other):
return self.replace(other,'')
>>> a = Nstr("I love you aaaaaa")
>>> b = Nstr("a")
>>> a - b
'I love you '
当实现a-b操作时,触动__sub__魔法方法,此时,a为self,b为other,执行__sub__函数时,
返回 self.replace(other,"") ,即返回self(即a),在a中,将other(即b)replace(替换)成“”
(减去谁,就是把谁编程空格)
第43课
类的静态属性
class C:
@staticmethod 表示static()是静态方法
def static(arg1,arg2,arg3):
print(arg1,arg2,arg3,arg1+arg2+arg3)
def nostatic(self):
print("I love you")
44 魔法方法:简单定制
import time as t
#初始化
class Mytimer:
def __init__(self): 用来初始化,很重要!!!
self.begin = 0
self.end = 0
self.lasted = []
self.unit = ["年","月","天","小时","分钟","秒"]
self.prompt = "未开始计时"
def __str__(self): 因为后面都用到了prompt 这个提示语句,属于字符串,
return self.prompt 所以需要定义凡是遇见字符串,就要返回prompt
__repr__=__str__ 为了实现目标:输入t,直接显示计时的时间,因为把t定义为了字符串
#如果不加这句
#>>> t1
#<__main__.Mytimer object at 0x000000D4E02A9CF8>
'''
原因如下:
class A: class A:
def __str__(self): def __repr__(self):
return "lalala" return "lalala"
a = A()
要实现输入a,就自动弹出 lalala
如果是str,应该是print(a) 如果是repr ,应该是直接输入a
'''
#开始计时
def start(self):
print("开始计时")
self.begin = t.localtime()
self.prompt = "请先调用stop(),结束计时"
#停止计时
def stop(self):
if not self.begin: self.begin 的初始值是0 ,not self.begin 就是1,if 1 ,表示为真,要执行if 语句
print("请先调用start(),开始计时")
else:
self.end = t.localtime()
self._calc()
print("结束计时")
#计算时长
def _calc(self):
self.lasted = []
self.prompt = "一共花了"
for index in range(6):
self.lasted.append(self.end[index]-self.begin[index])
self.prompt += (str(self.lasted[index])+self.unit[index]) 把计时时间t定义为字符串
#return prompt 不需要返回,不知道为什么
30分钟的课程我用了3小时
调BUG真的太费脑了,,,,
在为我的未来哀叹的同时感谢BUG,让我成长。
下次看197 第44课的作业
下次看第45个视频