首页 > 其他 > 详细

自定义的类创建的对象使用len(x)函数和abs(x)函数

时间:2018-11-28 10:06:06      阅读:138      评论:0      收藏:0      [点我收藏+]

class Mylist:
‘‘‘自定义的容器类,内部使用内建的列表保存数据‘‘‘
def __init__(self, iterable):
self.data = [x for x in iterable]

def __repr__(self):
return "Mylist(%s)" % self.data

def __len__(self):
‘‘‘此方法是len()函数调用,此方法返回的必须是整数‘‘‘
count = 0
for x in self.data:
if x:
count += 1
return count
# return len(self.data) # 或者直接写这个,因为self.data是列表类型
# return len(self) # 这里出现递归调用,最终报错

def __abs__(self):
# for x in self.data: # 这里是遍历元素,不可行
# if x < 0:
# x = -x


# 正确方法一
i = 0
while i < len(self.data):
if self.data[i] < 0:
self.data[i] = -self.data[i]
i += 1
return self.data
# 正确方法二
# L = [abs(x) for x in self.data] # 这里是可行的,数字类型是有内建的__abs__()方法
# return L

 

myl = Mylist([1,-2,3,-4])
print(myl) # <__main__.Mylist object at 0x000001FDFD4E42E8>,没有重写__str__的时候
# Mylist([1, 2, 3, 4]) 重写__str__的时候
# print(len(myl)) # 着了会报错,因为object里面没有定义__len__,这个类里面自己也没有定义,要定以后才能使用
# dir(object)
# [‘__class__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘,
# ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘,
# ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘]
print(len(myl))

myl2 = abs(myl)
print(myl2)

自定义的类创建的对象使用len(x)函数和abs(x)函数

原文:https://www.cnblogs.com/thejie/p/10029944.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!