2017-07-28 51 views
0
#!/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」,我應該怎麼做?打印對象名稱,當對象調用類中的函數時

+0

您是否在尋找變量名X?應該打印? – Haranadh

+0

只需用'print(「這是'x'call me」)替換'y()'裏面的'pass'' – ettanany

+3

對象不知道它們的名字。 –

回答

0

一切都是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 

結果

對象或實例的名稱是什麼只是參照存儲器 位置

+0

否,我只想要現在哪些對象正在調用這個函數,我們可以使用一些名稱約定(vm1 vm2,vm3 ..)來編寫代碼,例如,我們有很多vm實例,vm1 = AA(),vm1.run_cmd(「 xxxx「),vm2 = AA(),vm2.run_cmd(」「)我想知道哪個vm運行一些cmd – user1334609

+0

id(self)不是在這裏可讀 – user1334609

+1

ID是不可讀的,我實際上想在日誌中顯示這個信息以使其有意義 – user1334609

1

我希望,這將解決您的問題

#!/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") 
+0

我真的不想傳遞一個參數來獲得這個,「x」已經存在,我認爲應該有一種方法來打印出來 – user1334609

+0

@ user1334609不,沒有。 '''引用'AA'實例的'AA'實例知道_nothing_關於'x'。相信與否,但這是你會得到的最好答案。 –

0

從@ 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 
+0

我真的想避免使用參數 – user1334609

+0

@ user1334609,如果不想使用參數,那麼在'y(self)'裏面你可以檢查自身的id,這可以幫助你識別哪個vm對象發生。意味着你可以選擇option2。 – Haranadh