python创建一个列表对象例题_python – 如何创建列表对象?实例没有属性’__getitem__’...

我建议你考虑使用

collections.namedtuple工厂函数制作你的Point类,这将使它成为内置元组类的子类.这将为您节省一些锅炉板工作. namedtuple类具有可以通过名称访问的属性,例如p.x和索引,如p [0].

它们也像元组一样非常有效,如果你有很多类实例,这可能很重要.

您可以进一步专门化通过子类化返回的内容,或使用verbose选项捕获源代码并根据需要进行修改.

在上面链接的文档中有一个示例,显示它用于创建2D Point类,这似乎在您的特定用例中非常有用.

这是一个示例,展示了如何通过子类化定义自定义3D Point类:

from collections import namedtuple

class Point(namedtuple('Point', 'x y z')):

__slots__ = () # prevent creation of instance dictionaries to save memory

point_count = 0 # instance counter

def __init__(self, *args):

super(Point, self).__init__(*args)

Point.point_count += 1

def distance(self, other):

return sum((self[i]-other[i])**2 for i in xrange(len(self))) ** 0.5

def copy_point(self, distance):

'create another Point at distance from the self Point'

return Point(*[dimension+distance for dimension in self])

p1 = Point(0, 0, 0)

print 'p1:', p1

p2 = p1.copy_point(20)

print 'p2: Point(%s)' % ', '.join(str(p2[i]) for i in xrange(len(p2)))

print 'distance p1 p2: %.3f' % p1.distance(p2)

输出:

p1: Point(x=1, y=2, z=3)

p2: Point(21, 22, 23)

distance p1 p2: 34.641

请注意,通过使用namedtuple,您不必自己实现__getitem __(),也不必编写__str __()方法.需要__init __()的唯一原因是因为需要增加已添加的类实例计数器 – 这是nameupups默认情况下没有或没有的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值