返回变量的名称而不是其对象引用代码

时间:2014-11-03 18:37:22

标签: python object

之前可能已经提出过这个问题,但我不确定我看过的问题是否完全相同。

我有一个追踪光线的程序。每条光线都是一个物体,每个镜头都是一个物体。如果,当用户试图使用该方法通过镜头传播光线时,光线实际上并不通过镜头,我希望程序告诉用户这个事实。

伪代码:

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'

2 个答案:

答案 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属性。