Почему lib.__dict__(vars) показывает объект только после выполнения hasattr или getattr?
Вот пример кода:
import ctypes.util
from ctypes import CDLL
path = ctypes.util.find_library('crypto')
lib = CDLL(path)
hasattr(lib, 'EVP_get_cipherbyname') #only run this line or getattr,
#the print(lib.__dict__) show the EVP_get_cipherbyname
print(lib.__dict__)
print(vars(lib))
Результат:
{'EVP_get_cipherbyname': <_FuncPtr object at 0x7f1b30835048>, '_handle': 21221024, '_name': 'libcrypto.so.1.0.0', '_FuncPtr': <class 'ctypes.CDLL.__init__.<locals>._FuncPtr'>}
Я нашел, если код без строки
hasattr(lib, 'EVP_get_cipherbyname')
результат печати ниже, который не включает 'EVP_get_cipherbyname'
{'_name': 'libcrypto.so.1.0.0', '_handle': 24407408, '_FuncPtr': <class 'ctypes.CDLL.__init__.<locals>._FuncPtr'>}
Может кто-нибудь объяснить, почему?