从类函数中的参数/参数获取变量名

时间:2017-12-09 01:02:21

标签: python class variables static instance

我尝试获取变量的名称,并将其传递给函数。

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被传递了。因为否则无法正确构建查询。

我知道他们在课堂上使用静态变量,这可能是诀窍吗?

感谢您的帮助! :)

2 个答案:

答案 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成为Bself.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