#!/usr/bin/env python
class AA(object):
def __init__(self):
pass
def y(self):
pass
x=AA()
x.y()
當我執行x.y()時,我想打印「This is'x'call me」,我應該怎麼做?打印對象名稱,當對象調用類中的函數時
#!/usr/bin/env python
class AA(object):
def __init__(self):
pass
def y(self):
pass
x=AA()
x.y()
當我執行x.y()時,我想打印「This is'x'call me」,我應該怎麼做?打印對象名稱,當對象調用類中的函數時
一切都是Python中的一個對象,當你創建一個類的實例時,它會分配內存位置,並且這個內存位置被x變量引用。唯一的對象有內存位置,變量沒有任何內存位置。變量只是引用對象存儲位置
在你的例子,X什麼只是參考到記憶位置
如果定義一個變量
a = 2
這意味着一個參照2
a = 1
這意味着現在引用1
將一個變量分配給另一個變量會使新標記綁定到相同的值,如下所示。
b = a
這意味着a和b二者參照1個
ID()在python返回存儲位置
print id(a)
print id(b)
輸出
140621897573617
140621897573617
實施例1:
>>> s1 = 'hello'
>>> s2 = 'hello'
>>> id(s1), id(s2)
(4454725888, 4454725888)
>>> s1 == s2 True
>>> s1 is s2 True
>>> s3 = 'hello, world!'
>>> s4 = 'hello, world!'
>>> id(s3), id(s4) (4454721608, 4454721664)
>>> s3 == s4 True
>>> s3 is s4 False
實施例2
>>> class Foo:
... pass
...
>>> bar = Foo()
>>> baz = Foo()
>>> id(bar)
140730612513248
>>> id(baz)
140730612513320
結果
對象或實例的名稱是什麼只是參照存儲器 位置
否,我只想要現在哪些對象正在調用這個函數,我們可以使用一些名稱約定(vm1 vm2,vm3 ..)來編寫代碼,例如,我們有很多vm實例,vm1 = AA(),vm1.run_cmd(「 xxxx「),vm2 = AA(),vm2.run_cmd(」「)我想知道哪個vm運行一些cmd – user1334609
id(self)不是在這裏可讀 – user1334609
ID是不可讀的,我實際上想在日誌中顯示這個信息以使其有意義 – user1334609
我希望,這將解決您的問題
#!/usr/bin/env python
class AA(object):
def __init__(self):
pass
def y(self, name):
self.name = name
print("This is %s call me" % name)
x = AA()
x.y("Tarzan")
我真的不想傳遞一個參數來獲得這個,「x」已經存在,我認爲應該有一種方法來打印出來 – user1334609
@ user1334609不,沒有。 '''引用'AA'實例的'AA'實例知道_nothing_關於'x'。相信與否,但這是你會得到的最好答案。 –
從@ user1334609的評論:
例如,我們有很多虛擬機實例,VM1 = AA(), VM1的。 RUN_CMD( 「XXXX」),VM2 = AA(),vm2.run_cmd( 「」)我想知道哪些虛擬機 是運行一些CMD
要知道哪些VM已運行,你可以只使用命令id(self)
,i而不是試圖在代碼中查找聲明的變量。
您現在可以從哪個vm命令運行中看到兩個選項。
選項1:將成員變量添加到類中。這可以提供可讀性。
選項2:在y()
中使用的id
。這避免了添加額外的變量。
示例代碼:
#!/usr/bin/env python
class AA(object):
def __init__(self, vmname):
self.whoami = vmname
def y(self):
print "My Name is %s " % self.whoami # Option1
print "My Id is %s " % id(self) # Option2
def main():
vm1=AA("Yoda")
vm1.y()
vm2=AA("Boda")
vm2.y()
vm3=AA("Anakin")
vm3.y()
if __name__ == '__main__':
main()
這給了以下的輸出:
My Name is Yoda
My Id is 139725977256656
My Name is Boda
My Id is 139725977256720
My Name is Anakin
My Id is 139725977256784
我真的想避免使用參數 – user1334609
@ user1334609,如果不想使用參數,那麼在'y(self)'裏面你可以檢查自身的id,這可以幫助你識別哪個vm對象發生。意味着你可以選擇option2。 – Haranadh
您是否在尋找變量名X?應該打印? – Haranadh
只需用'print(「這是'x'call me」)替換'y()'裏面的'pass'' – ettanany
對象不知道它們的名字。 –