gpt4 book ai didi

python - 需要 float __len__,而不是整数

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:57 24 4
gpt4 key购买 nike

出于我的目的,我创建了一个保留对象的类。

该对象的实际长度是 float ,而不是整数。可能有 2 个对象的差异 - 比如说 0.00001,最短的对我来说是最好的。

为了方便起见,我在类中定义了一个 __len__ 方法,以便能够调用 len(obj)。

但是,python 不允许我 __len__ 返回 float ,只能返回整数。

对于给定的 K,我想返回 int(real_length * 10**K)。

是否有更好的解决方案——处理类对象的浮点长度?

编辑:

在我的类里面,我在 n 维空间中有点,我考虑点之间的距离,这是一个实数,而不是整数。

我可以以某种方式使用 len 函数吗?

最佳答案

这为 float 添加了“字符串长度”功能。对象上的 len() 给出数字的长度,就好像它是一个字符串

   class mynumber(float):
def __len__(self):
return len(self.__str__())
pass


a=mynumber(13.7)
b=mynumber(13.7000001)

print len(a)
print len(b)

在 python 2.7 上测试。希望这有帮助

根据您的评论,这是一个不同的答案。它设置一个采用两个坐标对的对象,然后使用半正矢 ( Haversine Formula in Python (Bearing and Distance between two GPS points) ) 公式来查找它们之间的距离

from math import radians, cos, sin, asin, sqrt

class mypointpair(object):
def __init__(self):
self.coord=[]
pass
def add_coords(self,a,b):
self.coord.append((a,b))
def __len__(self):
return self.haversine(self.coord[0][0], self.coord[0][1], self.coord[1][0], self.coord[1][1])


def haversine(self,lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
km = 6367 * c
return km


pp1=mypointpair()
pp1.add_coords(53.32055555555556 , -1.7297222222222221 )
pp1.add_coords(53.31861111111111, -1.6997222222222223 )

print len(pp1)

关于python - 需要 float __len__,而不是整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17896767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com