之前可能已经提出过这个问题,但我不确定我看过的问题是否完全相同。
我有一个追踪光线的程序。每条光线都是一个物体,每个镜头都是一个物体。如果,当用户试图使用该方法通过镜头传播光线时,光线实际上并不通过镜头,我希望程序告诉用户这个事实。
伪代码:
class OpticalElement:
...
def propagate_ray(self):
if intersect:
calculate new direction etc
else:
print "Ray %s did not intersect optical element" % (ray)
这样
>> A = Ray(args) # won't intersect lens1
>> B = Ray(different args)
>> lens1 = OpticalElement(args)
>> lens1.propagate_rays(A, B)
'Ray <Ray instance at 0x7688> did not intersect optical element'
谁知道有50条光线传播时哪条光线是什么?我希望它输出:
'Ray A did not intersect optical element'
答案 0 :(得分:1)
你做不到;对象不跟踪引用它们的名称。
任何对象都可以包含介于1和无限名称之间的对象或引用它们的其他对象,如果有多个对象或列表或字典引用了对象,您会选择什么名称?或者,如果您使用lens1.propagate_rays(Ray(args), Ray(different_args))
你能做的最好的事情就是给你的对象一个名字属性,然后在对象的__repr__
中引用它:
class Ray:
def __init__(name, *other_args):
self.name = name
def __repr__(self):
return '<Ray({!r}, ....>'.format(self.name)
答案 1 :(得分:0)
对象可以有许多引用它们的不同变量。您应该提供对象name
属性。