有人可以帮我解决如何从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()
答案 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