在函数中调用特定变量

时间:2015-11-30 09:42:47

标签: python variables

有人可以帮我解决如何从Python中的其他函数访问特定变量的问题吗?

self.me

我们只需在call_me(self):的函数中显示A().call_me() 因此,如果我们调用its me to change,则输出为var obj = { key1 : { aliases: ["alias1", "alias2"], prop1: someVal, prop2: someOtherVal } } var objHashMap = {}; for(var key in obj){ objHashMap[key] = obj[key]; objHashMap[obj[key].aliases[0]] = obj[key]; objHashMap[obj[key].aliases[1]] = obj[key]; }

修改

class A:
    def something(self, other):
        other = other
        me = "its me to change"
        return other

    def call_me(self):
        something = A().something
        #get variable 'me' only from function of something

A().call_me()

1 个答案:

答案 0 :(得分:4)

看起来你并不完全了解Python对象的工作原理。

class A:
    me = None

在这里,您声明了A类的属性,在其他OO语言中称为静态属性=>它在类的所有对象之间共享

class A:
    ...
    def __init__(self):
        self.me = self.me

几乎是一个无操作:您使用具有相同名称和相同值的对象属性覆盖静态属性A.me。如果在创建类A的对象时它具有私有副本的唯一效果:

>>> a = A()
>>> id(a.me) = id(A.me) # same value ?
True
>>> id(a.me) is id(A.me) # same object
False

让我们继续

class A:
    ...
    def something(self, other):
        other = other
        self.me = "its me to change"
        return other #this function just return 'other' only.
  • other = other真是无操作
  • self.me = ...设置对象属性me的值 - 您现在可以使用任何其他方法self.me或从外部访问此新值a.me(如果a是班级A的对象) - 即使您未在self.me = self.me
  • 中完成__init__,也会相同

最后但并非最不重要:

class A:
    ...
    def call_me(self):
        something = A().something
        print something.__get__(self.me) # ???
  • something = A().something:声明类A的新对象,并使局部变量something指向该对象的something方法 - 因为该变量是本地的方法将在方法退出时销毁新对象
  • print something.__get__(self.me):什么都不做,因为你从不调用something方法,所以只显示,所以你得到:

    >>> a = A()  # create an object a of class A
    >>> a.call_me()   # call call_me method on that object
    <bound method A.something of <__main__.A instance at ...>>
    >>> A().call_me()   # directly call `call_me` on a temporary object
    ...
    TypeError: __get__(None, None) is invalid
    

因为在第一种情况下你只是打印局部变量,因为self是一个有效的对象(a),而在第二种情况下它只是一个临时的

我认为你想要的只是:

class A:
    def something(self, other):
        self.me = "its me to change"  # sets the attribute 'me'
        return other #this function just return 'other' only.

    def call_me(self):
        self.something(None)  # call something on self => sets  self.me
        print self.me #get variable 'self.me' after setting it in 'something'

你现在按预期得到了:

>>> A().call_me()
its me to change