59386


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

[code]

    from socket import socket
    socket.gethostbyname(socket.gethostname())
    
[/code]

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

[code]

    import socket
    socket.gethostbyname(socket.gethostname())
    
[/code]

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


CC BY-SA 4.0
2019-10-01T04:37:22.183
59383
2019-10-01T05:10:06.417
34471
question
python socket
Pythonのsocket通信のfromとimportについて

[code]

    from socket import socket
    
[/code]

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

[code]

    import socket
    socket = socket.socket
    
[/code]

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

[code]

    AttributeError: type object 'socket' has no attribute 'gethostbyname'
    
[/code]

それがこのエラーです。

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

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

[code]

    from socket import gethostbyname, gethostname
    gethostbyname(gethostname())
    
[/code]


CC BY-SA 4.0
2019-10-01T05:10:06.417
59386
2019-10-01T05:10:06.417
806
59383
answer