在python中构建一个新的类对象时,我希望能够基于类的实例名创建一个默认值,而不需要传递额外的参数。我怎样才能做到这一点?下面是我尝试的基本伪代码:
class SomeObject():
defined_name = u""
def __init__(self, def_name=None):
if def_name == None:
def_name = u"%s" % (<INSTANCE NAME>)
self.defined_name = def_name
ThisObject = SomeObject()
print ThisObject.defined_name # Should print "ThisObject"
实例没有名称。当全局名称
ThisObject
与通过计算SomeObject
构造函数创建的实例绑定时,构造函数已完成运行。如果您希望对象有一个名称,只需在构造函数中传递该名称。
可以在类中创建一个方法,该方法检查当前帧中的所有变量,并使用
hash()
查找self
变量。这里提出的解决方案将返回指向实例对象的所有变量。
在下面的类中,
isinstance()
用于避免应用hash()
时出现问题,因为例如numpy.array
或list
之类的某些对象是不可更改的。已完成以下测试:
结果是:
好吧,几乎有一种方法:
traceback模块允许您查看用于调用SomeObject()的代码。 通过一点字符串的缠绕,
text[:text.find('=')].strip()
您可以 猜猜你的名字应该是什么。然而,这个黑客是脆弱的。例如,这样做效果不太好:
所以如果你要使用这个方法,你必须记住你必须调用SomeObject() 使用简单的python语句:
顺便说一下,作为使用回溯的进一步示例,如果您定义
然后你可以打电话
打印变量名及其值。
相关问题 更多 >
编程相关推荐