59386
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`の部分を残したまま、エラーを出さないコードにするにはどうすれば良いですか？
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について
```

    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())
    
```
CC BY-SA 4.0
2019-10-01T05:10:06.417
59386
2019-10-01T05:10:06.417
806
59383
answer