Pythonのsocket通信のfromとimportについて

投稿者: Anonymous

Pythonのfromとimportの使い方について質問です。

from socket import socket
socket.gethostbyname(socket.gethostname())

だとエラーになって
AttributeError: type object ‘socket’ has no attribute ‘gethostbyname’
というメッセージが出ます。

import socket
socket.gethostbyname(socket.gethostname())

だとエラーにならないのは何故でしょうか?
from socket import socketの部分を残したまま、エラーを出さないコードにするにはどうすれば良いですか?

解決

from socket import socket

これは、socketモジュールにあるsocketオブジェクト(この場合は関数オブジェクト)を現在の名前空間に取り込んでいます。
以下と同義です

import socket
socket = socket.socket

socket.gethostbyname() は socketモジュールにある gethostbyname 関数オブジェクトを呼び出すことを意図したコードです。このため、 from socket import socket と書いてしまうと、現在の名前空間にあるのは socketモジュールではなく、socket関数オブジェクトのため、「socket関数オブジェクトにgethostbyname属性がない」というエラーになります。

AttributeError: type object 'socket' has no attribute 'gethostbyname'

それがこのエラーです。

from socket import socket の部分を残したまま、エラーを出さないコードにするにはどうすれば良いですか?

以下の様に書くことが出来ます

from socket import gethostbyname, gethostname
gethostbyname(gethostname())
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *