[英]What does the hex value means when printing a method in python?
只是一個簡單而快速的問題,我找不到答案。 我有這個類,里面有這個方法:
class Pokemon:
"This is a pokemon class"
number = 10
def birth(self):
print('Hello')
print(Pokemon.birth)
輸出:
<function Pokemon.birth at 0x7fc78c6e8160>
當我打印它返回一個十六進制數的方法時,這個十六進制到底是什么意思? 內存位置? 我試圖了解代碼背后的過程。
PD。 我不是想讓這門課起作用,只是對十六進制好奇
謝謝
是的,那是內存地址。 您也可以使用id()
內置函數獲取它。
這是函數的內存地址。
調用函數時需要使用括號。 如果你不使用括號來調用函數,解釋器不會抱怨/崩潰,它只會告訴你你擁有的是一個函數句柄(即你得到的消息,內存地址)。
順便說一句,您可以使用id()
獲取函數的十六進制內存地址
Help on built-in function id in module builtins: id(obj, /) Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (CPython uses the object's memory address.)
如果你想調用一個函數,你應該通過調用birth()
來調用它。 你的電話只顯示birth
的身份
為了使您的代碼工作,您需要創建一個類的實例。
pokemon
是Pokemon
類的一個實例,因此您可以調用屬於實例方法的birth
。 有關此主題的更多信息,請參見此處。
class Pokemon:
"This is a pokemon class"
number = 10
def birth(self):
print('Hello')
pokemon = Pokemon()
pokemon.birth()
Yes 是對象在內存中的地址。 它以十六進制數表示,以使其更具“人類可讀性”。
import sys
class Pokemon:
"This is a Pokemon class"
numner = 10
def birth(self):
print('Hello')
print(Pokemon)
#<class '__main__.Pokemon'>
print(Pokemon.birth)
#<function Pokemon.birth at 0x000001F83C177C10>
print(hex(id(Pokemon)))
#0x1f83bf6fad0
print(hex(id(Pokemon.birth)))
#0x1f83c177c10
print(Pokemon.birth.__repr__)
# <method-wrapper '__repr__' of function object at 0x0000018609D87C10>
只考慮直接歸因於對象的內存消耗,而不是它所引用的對象的內存消耗。
print(sys.getsizeof(Pokemon))
print(sys.getsizeof(Pokemon.birth))
#1064
#136
下面的代碼顯示了對象 Pokemon.birth 離開的地方。 它不在 globals() 命名空間中,而是在 '__main.__Pokemon' 類命名空間中。
print(globals()['Pokemon'])
# <class '__main__.Pokemon'>
print(Pokemon.__dict__['birth'])
# <function Pokemon.birth at 0x0000020D51167C10>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.