pythonの勉強始めたんだがエラーが出て原因が分からん

1: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:24:26.743 ID:zQsU0upY0

エラー文見ろとかいうクソなことは言うなよ
見てるに決まってるググって調べてるに決まってるからな分かったな
実行文↓ コードは次に貼る

C:\Users\riku1\OneDrive\ドキュメント\RESEARCH\PL>py test.py
Module is called
Classes and Functions are imiported
My name is bob
Human()
I’m tom. My stupid experience is suicide
Stupid
My name is mike and charge is cheaf
Human()
I’m innocense
Stupid
Traceback (most recent call last):
File “test.py”, line 31, in <module>
mp.Human.printcnt()
AttributeError: type object ‘Human’ has no attribute ‘printcnt’

2: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:24:50.217 ID:zQsU0upY0

test.py↓

import mypackage.module as mp
#from module import *

#exe
bob=mp.Human(“bob”)
bob.introduce()
bob.sayFuncName()
tom=mp.Stupid(“tom”,”suicide”)
tom.introduce()
tom.sayFuncName()
mike=mp.Criminal(“mike”,”cheaf”)
mike.introduce()
mike.sayFuncName()
maria=mp.Innocent(“maria”)
maria.introduce()
maria.sayFuncName()
”’
bob=Human(“bob”)
bob.introduce()
bob.sayFuncName()
tom=Stupid(“tom”,”suicide”)
tom.introduce()
tom.sayFuncName()
mike=Criminal(“mike”,”cheaf”)
mike.introduce()
mike.sayFuncName()
maria=Innocent(“maria”)
maria.introduce()
maria.sayFuncName()
”’
mp.Human.printcnt()

8: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:25:57.920 ID:zQsU0upY0

package\module.py↓

class Human():
count=0

def __init__(a,name=”none”):
a.name=name
Human.count+=1

def introduce(self):
print(“My name is {0}”.format(self.name))

def sayFuncName(self):
print(“Human()”)

@classmethod
def printcnt(cls):
print(cls.count)

class Stupid():
def __init__(self,name=”none”,experience=”A stupid thing”):
self.name=name
self.exp=experience

def introduce(self):
print(“I’m {0}. My stupid experience is {1}”.format(self.name,self.exp))

def sayFuncName(self):
print(“Stupid”)

class Criminal(Human,Stupid):
def __init__(self,name=”None”,charges=”None”):
super().__init__(name)
self.charges=charges

def introduce(self):
print(“My name is {0} and charge is {1}”.format(self.name,self.charges))

class Innocent(Stupid,Human):
def __init__(self,name=”name”):
super().__init__(name)

def introduce(self):
print(“I’m innocense”)

print(“Module is called”)
print(“Classes and Functions are imiported”)

10: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:27:08.403 ID:3SuwLtRo0
printcnt が何かわからないけど実装してる?typoとかじゃない?

12: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:27:46.704 ID:zQsU0upY0
問題はmodule.pyの@classmethodの部分かtest.pyのmp.Human.printcnt()なんだろうけどどういじってもエラー出る

13: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:28:37.686 ID:zQsU0upY0
indentは5chがクソだからコピペで反映されてないだけでちゃんとソースファイルではしてるから

14: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:29:03.192 ID:3SuwLtRo0
引数 cls がいるんじゃないの

15: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:31:12.969 ID:zQsU0upY0
>>14
関数定義にってこと?ちゃんと書いてるよ
呼び出しのときはインスタンスと同じようにclsにはクラス自身が自動的に入るから記述しなくてもいいはず

16: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:31:15.906 ID:IV623cMh0
Human.printcnt()
クラスに生えてるわけだしインスタンスからじゃなくてクラスから呼んでみれば?

18: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:34:00.932 ID:zQsU0upY0
>>16
Humanはクラス名だからクラスから呼び出してるはず

19: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:37:28.286 ID:IV623cMh0
>>18
mp.__class__.printcnt()
では?覚えてないが
>>18

20: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:38:14.493 ID:zQsU0upY0

Humanの定義
class Human():
count=0

def __init__(a,name=”none”):
a.name=name
Human.count+=1

def introduce(self):
print(“My name is {0}”.format(self.name))

def sayFuncName(self):
print(“Human()”)

@classmethod
def printcnt(cls):
print(cls.count)

test.pyの呼び出し文
mp.Human.printcnt()

エラー文
Traceback (most recent call last):
File “test.py”, line 31, in <module>
mp.Human.printcnt()
AttributeError: type object ‘Human’ has no attribute ‘printcnt’

23: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:41:34.036 ID:IseBY0qTM
>>20のclsをselfにすればいいんじゃない?

24: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:44:57.673 ID:zQsU0upY0
>>23
ただの仮引数だし名前は関係ないんじゃね?
一応試したけどダメだった

21: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:40:31.626 ID:zQsU0upY0
print(mp.Human.count)だと上手くいく

25: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:52:13.230 ID:3SuwLtRo0
Module is called
Classes and Functions are imiported
My name is bob
Human()
I’m tom. My stupid experience is suicide
Stupid
My name is mike and charge is cheaf
Human()
I’m innocense
Stupid
2
手元でインデント正しく直して動かしたらこうなったよ

26: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:57:08.014 ID:zQsU0upY0
>>25
嘘だ

31: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:59:35.967 ID:3SuwLtRo0
>>26
できるならgistに貼るとかしてみて
たぶんインデント狂ってる気がするよ

32: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:01:37.073 ID:zQsU0upY0
>>31
github?
授業で使ったことあるけどよくわからん

28: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:57:42.943 ID:xsiNi/n1d
大体アナコンダ入れればなおる

29: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:58:35.083 ID:zQsU0upY0
>>28
使ってないけど一応入ってる

30: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:59:27.954 ID:hMbRd0AmM
>>29
使うか消すかしたほうがいいと思います

33: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:07:23.185 ID:3SuwLtRo0
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ
Wandbox is Online Compiler

mypackage/module.py をまとめて mp. 取るようにしたコード
これで実行できるからたぶんそっちのコードの何かが間違ってる

36: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:14:12.019 ID:3SuwLtRo0
Windows 環境分からないけどいちおう確認でPython -V でバージョン 3.7 以降くらいだよね
あと >>33 で貼ったコードをそのまま test2.py とかにして手元で実行したらどうなる?

37: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:16:33.263 ID:zQsU0upY0
>>33のmodule.pyの部分だけコピペしてみたけどやっぱりエラーでるな
処理系の問題?

34: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:10:04.797 ID:zQsU0upY0
imgurに張った
no title

38: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:16:45.408 ID:3SuwLtRo0
>>34
これはぱっと見あってる気がするから疑ってすまんかった

51: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:27:39.877 ID:3SuwLtRo0

>>48

つまりそもそも mypackage の中は完成品じゃなかったのね

>>34
VSCode の画像貼るときにエクスプローラーとかディレクトリ名も一緒に出してたらここで気づけたかも

設定できたはずだから調べてみるといいよ

53: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:29:10.426 ID:zQsU0upY0
>>51
ありがとう
ちなみにVScodeじゃなくてatomだぜ

55: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:31:25.577 ID:3SuwLtRo0
>>53
ほんとだ。アイコン見てなかった
見た目そっくりだなー

35: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:10:24.903 ID:3SuwLtRo0
ちなみにこれは貼るためにまとめただけで手元ではちゃんと mypackage/module.py と分離して動かしてる

39: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:17:22.085 ID:zQsU0upY0
Python 3.8.3 rc1 だった

41: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:21:17.931 ID:3SuwLtRo0

>>39
ためしに合わせてみようと思ったけど rc はちょっと面倒だな

安定版入ってない?

40: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:18:06.943 ID:3SuwLtRo0

まるっとコピって実行して動かないなら処理系かOS 依存な気がする

Mac とWandbox では動くからソースは問題ない気がする

42: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:21:25.261 ID:zQsU0upY0
やべえ
上手くいったけどマジであほみたいなミスで申し訳ない

43: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:22:19.830 ID:3SuwLtRo0
お。うまくいった?後学のために原因を教えていただきたく

48: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:24:39.447 ID:zQsU0upY0
>>43
後学もクソもないと思う
俺がクソみたいな見落とししてただけ
mypackageの中とカレントディレクトリの両方にmodule.pyが作られてて
そのカレントディレクトリの方のmodule.pyにだけprintcnt()関数を書いてた
当然importしてるのはmypackageの方だけだから見つかるはずがない
マジですまんかった

44: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:22:32.506 ID:zQsU0upY0
マジで1時間以上悩んでたのが馬鹿みたいだしこんな間抜けに突き合わせてしまって申し訳なさすぎる

49: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:26:36.053 ID:SIjuB1HPM
どうでもいいけど
パスのドキュメントってカタカナ入ってるのいつかバグおこしそう

52: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:28:19.406 ID:zQsU0upY0
>>49
俺も直したいんだけど、一回”document”に変更したらonedriveがバグったから触れないようにしてる

54: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:30:38.271 ID:3SuwLtRo0
>>49
>>52
うろ覚えだけど新しいWindows は標準のディレクトリに関してはエクスプローラーの見た目の言語と内部の名称は別で持ってるから正しく実装されてるソフトならあまり問題は出ないかも

56: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:35:11.946 ID:zQsU0upY0
>>54
c:\users\riku1\にdocument(エクスプローラでは”ドキュメント”)があることは確認したんだけど、onedriveディレクトリもあってその中に”ドキュメント”フォルダがあるんだよな
windowsだからonedrive使ってるけど結構異端なのか?

57: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:39:53.124 ID:3SuwLtRo0

>>56
あ。ちゃんと見てなかったわ。ぼけぼけっすね

異端と言うならソースはOneDrive じゃなくてGit で管理していこう。とかになるな。いまはGitHub のほとんどの機能が無償で使えるから触れるようになるといいよ

59: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:43:47.066 ID:zQsU0upY0
>>57
gitはエンジニアなら使えないとな
bitbucketはrubyの授業で使ってたが

61: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 02:46:34.823 ID:3SuwLtRo0

>>59
いまは学生でもプロってか仕事と同じ道具がほぼ制限なしで使えるからやるだけ得だよ

仕事なら有償の機能やソフトさえ学生なら安価か無償で使えるし

11: 以下、5ちゃんねるからVIPがお送りします 2020/05/11(月) 01:27:37.832 ID:TUrDVzAyr
エラーの原因は3つしかない。
勉強不足、調査不足、仮定不足。

引用元

管理人からひと言

あるある

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

フォローする

スポンサーリンク
スポンサーリンク