我尝试获取变量的名称,并将其传递给函数。
class A():
def __init__(self):
self.a = 1
class B():
def __init__(self):
self.b = A()
self.c = A()
def doSomething(self, hello):
print(hello)
B().doSomething(B().b)
<__main__.A object at 0x7f67571a3d68>
我想要的是我可以在函数B()。doSomething()中识别出变量是b。这可能吗?一个限制是在函数B()。doSomething()中只传递B的实例变量。
例如在peewee(https://github.com/coleifer/peewee)中,python中的MySQL ORM,它们构建用于过滤的表达式,如:
B.select().where(B.b == True)
不知怎的,他们能够识别出b被传递了。因为否则无法正确构建查询。
我知道他们在课堂上使用静态变量,这可能是诀窍吗?
感谢您的帮助! :)
答案 0 :(得分:0)
通过您的B().doSomething(B().b)
示例电话,我将假设您正在尝试确定变量hello
是否等同于在此处声明的变量b
class B
对象。
在这种情况下,您需要做的就是调用self
引用。 self
指的是您正在使用的对象的实例,并且类中定义的每个方法都会自动引用对象的self
作为方法属性。
因此,要确定对象b
变量是否等于hello
参数,您需要做的只是if self.b == hello: #do code
答案 1 :(得分:0)
B().b
不是B
的实例变量;相反,它是A
的实例变量。在B
中的构造函数中,您可能意味着self.a
成为B
或self.a
的实例,成为B
的实例。如果这是您的一般想法,您可以实现一个布尔重载方法,以便在两者之间进行分配。对于代码,最好创建第三个类C
,以检查传递给doSomething
的属性属于哪个类:
class A():
def __init__(self):
self.a = 1
def __bool__(self):
return True
class B():
def __init__(self):
self.b = 1
def __bool__(self):
return False
class C():
def __init__(self):
self.a = A()
self.b = B()
def doSomething(self, hello):
if not hello:
print("instance of a got passed")
else:
print("instance of b got passed")
C().doSomething(C().b)
输出:
instance of b got passed