自定义的类创建的对象使用len(x)函数和abs(x)函数
Posted thejie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义的类创建的对象使用len(x)函数和abs(x)函数相关的知识,希望对你有一定的参考价值。
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)函数的主要内容,如果未能解决你的问题,请参考以下文章