码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-11-28 12:13:17      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:函数   reduce   报错   nbsp   sel   保存   print   new   出现   

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)函数

标签:函数   reduce   报错   nbsp   sel   保存   print   new   出现   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!