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

2024-05-20 09:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

这很可能是以前问过的问题,但我不确定我看到的问题有完全相同的情况

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

伪代码:

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'

Tags: 用户程序notargselement物体透镜光线
2条回答

你不能那样做;对象不跟踪引用它们的名称

任何对象都可以有1到无限个名称或引用它们的其他对象,因此如果有多个名称或对象被列表或字典引用,您会选择哪个名称?或者,如果您用lens1.propagate_rays(Ray(args), Ray(different_args))将这些对象直接传递到您的方法中呢

最好给对象一个name属性,然后在对象的__repr__中引用该属性:

class Ray:
    def __init__(name, *other_args):
        self.name = name

    def __repr__(self):
        return '<Ray({!r}, ....>'.format(self.name)

一个对象可以有许多不同的变量引用它们。你应该给你的对象name属性

相关问题 更多 >