gpt4 book ai didi

python - 在类 __init__() 中获取实例名称

转载 作者:IT老高 更新时间:2023-10-28 20:57:21 24 4
gpt4 key购买 nike

在 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"

最佳答案

好吧,几乎有办法做到这一点:

#!/usr/bin/env python
import traceback
class SomeObject():
def __init__(self, def_name=None):
if def_name == None:
(filename,line_number,function_name,text)=traceback.extract_stack()[-2]
def_name = text[:text.find('=')].strip()
self.defined_name = def_name

ThisObject = SomeObject()
print ThisObject.defined_name
# ThisObject

traceback 模块允许您查看用于调用 SomeObject() 的代码。通过一点字符串争论, text[:text.find('=')].strip() 你可以猜猜 def_name 应该是什么。

但是,这个 hack 很脆弱。例如,这不太好用:

ThisObject,ThatObject = SomeObject(),SomeObject()
print ThisObject.defined_name
# ThisObject,ThatObject
print ThatObject.defined_name
# ThisObject,ThatObject

所以如果你要使用这个 hack,你必须记住你必须调用 SomeObject()使用简单的python语句:

ThisObject = SomeObject()

顺便说一下,作为使用回溯的另一个例子,如果你定义了

def pv(var):
# stack is a list of 4-tuples: (filename, line number, function name, text)
# see http://docs.python.org/library/traceback.html#module-traceback
#
(filename,line_number,function_name,text)=traceback.extract_stack()[-2]
# ('x_traceback.py', 18, 'f', 'print_var(y)')
print('%s: %s'%(text[text.find('(')+1:-1],var))

那你就可以打电话了

x=3.14
pv(x)
# x: 3.14

打印变量名和它的值。

关于python - 在类 __init__() 中获取实例名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1690400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com