python初心者です、クラスのインポートについて質問させていただきたいです。 A.pyというモジュールから、XというクラスをA_test.pyにインポートする際、(A.pyとA_test.pyは同じ階層の同じパッケージ) from A import X と書いてインポートして、Xからabcというオブジェクトを作って表記するために abc = X() X.abc.print() と書いたのですが、(Xにはprintメソッドがあります) type object X has no attribute abc と出てしまいます。A.py内ではXは正常に動きprintも動作したのでクラス自体には問題がないと思うのですが、どこを治せば良いでしょうか...?よろしくお願いします...
pythonのクラスを概念的に理解させる為に、特に難解なselfとオブジェクトの関連を上手に解説されてる最高の教材動画だと思います。これ程丁寧かつ親切に噛み砕いて解説されてる動画は観たことがない。絶賛に値する名動画だと思います。動画主さんのご苦労と聡明な説明力に感謝します。
教授の講義より全然短いのに何倍もわかりやすいの凄い!助かりました!
ご視聴ありがとうございます!!クラスの理解のお役に立っていたら嬉しいです!
「クラスの基本を解説」を見ましたがついていけず。こちらをじっくり見ながら手を動かして理解するこができました!
この動画があって良かった…。ありがとうございます。
クラスの理解のお役にたててよかったです!!
初学者なのですが、めっちゃわかりやすかったです!ありがとうございました!
ご視聴いただき、ありがとうございます!!
お役に立てて良かったです🤗
selfの扱い方や、各変数の呼び出し方などについて理解が深まりました。
今回もありがとうございます。
コメントありがとうございます😊
クラスはつまづきやすいトピックですが、Pythonのクラスについて理解のお役に立てていたら嬉しいです!
めっちゃ分かりやすいです!!
わーー!!ありがとうございます☺️
今まで何となく使っていたclassがちゃんと理解できた気がします。ありがとうございます!
コメントありがとうございます😊
分かりやすい動画になるように工夫して作ったので、そう言ってもらえて嬉しいです!!
同じくPythonエンジニアをしているものです。私が思うクラスの文法は
クラス(設計図)
データ=クラス変数+インスタンス変数
機能=特殊メソッド+通常メソッド
クラス変数:クラスから生成されるインスタンスのすべてが共通にもつデータ。
メソッド外で定義された変数。
メソッド内に呼び出す場合はself.クラス変数。
クラス外に呼び出す場合はクラス.クラス変数。
インスタンス変数:各々のインスタンス固有のデータ
初期化メソッドでself.インスタンス変数=〜と定義された変数
メソッド内に呼び出す場合はself.インスタンス変数
クラス外に呼び出す場合はインスタンス.インスタンス変数
メソッド:クラスの中で機能を表現する
クラス外に呼び出す場合はインスタンス.メソッド()
※特殊メソッドはとくにインスタンス.メソッド()と呼び出さなくてもある条件を満たせば自動的にメソッドが実行される
サプーさんの動画を見て学んだ弟子ですw
Pythonチュートリアルの本では、料理に例えていましたが、こちらの成績表で例えている方が、個人的に分かりやすかったですし、こんなふうに使えそうだなぁと実用的なイメージが湧きやすかったです。
ありがとうございました👍
ご視聴いただきありがとうございます😊
クラスは理解しにくいトピックではあると思いますが、分かりやすいと言ってもらえて嬉しいです✨
python もサプーも大好きです!
わー!!嬉しいです☺️
これはかなりわかりやすい。学校の先生よりもうまい!
これは子供にも教えておこう。ありがとうございます。
ありがとうございます!分かりやすさを重視して作っているので、そう言ってもらえて嬉しいです!!
それぞれの人の成績が入ったCSVファイルを読み込んで、このクラスを使って成績表をいっぺんに出したいです。。
初心者に優しい動画なのでとても理解が深まりました!
ご視聴いただきありがとうございます😊
そう言っていただけて本当に嬉しいです!!
説明が丁寧で、構造的だと感じました。
非常にありがたいです。
seleniumに興味を持ってPython(3.x系一本で行きたい)かじり始めた者です。この動画おかげでクラスとは何ぞ…が解決できモジュールの使い方はソースコードを見てなんとなく理解 → コード内のワードでググれば近道だ。と気づけました。
ご視聴いただきありがとうございます!
この動画が少しでも、コード理解の参考になっていたら嬉しいです😊
クラスについて、解りやすい動画ありがとうございます。
ご視聴いただき、ありがとうございます!!
わかりやすいと思ってもらえて嬉しいです😊
神動画! ありがとうございます
クラスの理解のお役に立てていたら嬉しいです!
わかりやすい!ありがとうございました😭😭
ご視聴いただきありがとうございます!
クラスの理解のお役に立てていたら嬉しいです😊
オブジェクトが定義されてるなら、そのオブジェクトに対する関数も定義されてるって事だねえ
Python初学者のジジイですが、わかりやすい、チャンネル登録させてもらいました。これからも頑張ってください!
チャンネル登録ありがとうございます!これからもPython関連の動画を色々投稿していくので、ご視聴いただけたら嬉しいです!
わかりやすい!
ありがとうございます!!そう言っていただけて嬉しいです😊
メゾットは関数って考え方でよろしいでしょうか?
とてもわかりやすい抗議ででした!ありがとうございます!
1点質問なのですが、動画内23:16のsum_scoreをAttributeErrorで呼び出せない場合の処置なのですが、動画内でself.をつけると仰っていたのですが、よくわかりませんでした。動画内も修正前も修正後もself.がついているように見えるのですがどうでしょうか?
あ、編集が切れててちょっとわかりにくいですね。selfをつけたのは左辺のsum_scoreですね。sum_scoreは始めはselfがついてないです。sum_socreをインスタンス変数にしないとオブジェクトからアクセスできないのでselfをつけています!
@@pythonvtuber9917 ありがとうございます!見逃してました。問題なくアクセスできました。
毎日この一連のコードを打ち込んでいます。書式とか2番目の def など、まだまだです。
動画だと何度も見れるので、少しずつ理解していただけたらと思います😉
不明点があれば、コメントに記載いただけたらできる限り回答させていただいてます!
勉強させていただいてます◎
クラスについての前の動画で、イニシャライザの意味がよくわからなかったのですが、今回の動画でもよくわかりませんでした😢
ないとどうなるのでしょうか。普通に引数を受け渡しするだけではだめなのでしょうか。
python 初学者です。classの概念が理解できました。ありがとうございます。
1点classとは関係ないのですが、動画中に print(f"Aさんの3教科平均点:{avg_b}") とありますが、この print(f" ってどういう意味があるんでしょうか。
ご質問ありがとうございます!
こちらはf文字列(f-string)を使っています!Pythonの変数を文字列に埋め込むことができるんですが、色々な書き方があってとっても便利ですよ!
以前に、文字列フォーマットについて動画を出しているので、ぜひ、見てみてください😊
文字列フォーマット▶︎ ruclips.net/video/XvdJz2o-l60/видео.html
サプー中に入りたいです
実例を混じえての説明で分かりやすかったです。ありがとうございます。
初学者なので、自分でclassを作ろうとすると、まだ混乱します。そこで質問なのですが、classを実践的に習得できる動画作成の予定、勉強方法はありますか?
ご教授お願いいたします。
コメントありがとうございます!!
クラスの実践系の動画ですかね?作ろうと思っているんですが、まだ明確にいつ作るかの予定はないです😵 勉強方法としては、結局は色々なクラスを作ってみる・使ってみる、という事だと思います!
クラスもオブジェクト、要素もオブジェクト
メソッドも、インスタンスも
全部オブジェクト
より具体的で詳細な説明で、理解することができました!
まだまだ初心者ですが、イニシャライザーを使って生徒それぞれの平均を求めたりするやつがよく使いそうな予感がしたので覚えときます。素敵な動画をありがとうございますm(__)m
クラスは慣れるまで少々時間がかかりますが、ぜひ色々なシーンで試しに使ってみながら慣れてもらえたらと思います☺️
Pythonはインスタンス変数がオブジェクト作成後に追加できるという便利な機能あるけど、それが逆にクラス変数を同名のインスタンス変数が隠してしまって基本ルールのクラス変数はクラス共通なのに同名のインスタンス変数が優先され共通にならない状態が発生するのでややこしい。クラス変数をクラス間のグローバル変数みたいな感覚で使うと注意しないとうまくいかない 笑
おっしゃる通り、その部分はややこしいしバグの温床になりそうですよね...Pythonはオブジェクト指向でも書けるけど、厳密なものを求めるのであれば、別の言語の方が好ましいかな...という感じですね!
質問すいません。
selfとotherって同じっていう解釈でよろしいのでしょうか??
めちゃくちゃわかりやすかったです!
もしよければ__init__と__new__ってやつの違いの解説とかってできますか?
newだけじゃなく、特殊メソッドだけを扱った動画を作ろうと考えてるので、少々お待ちいただけたらと思います!
他の動画より分かりやすい!
ありがとうございます!!
動画の23:17あたりのsum_scoreの属性がないためエラーがでて、そのあとself.をつけるとエラーがなくなる部分がわかりませんでした
エラー後の「self.をつけると〜」の部分でどこが変わったのかが分からないんですが、どう変わったからエラーが出なくなったのでしょうか?
的外れな質問だったらすみません
サプーさん笑顔が素敵ですね!😄
全く違う人の本でpythonを勉強していたのですが、クラスについての理解を深めたいため、この動画にたどり着きました。
そこで教えていただきたいのですが、その人の本ではサプーさんがclass SchoolReport:としているところをclas schoolReport(object):としていました。どちらで書いても通るのですが、その意図するところを教えていだだけないでしょうか?その本の人の意図についてはサプーさんの推測でけっこうですので。
ご質問ありがとうございます😊
クラスの継承についてはご理解でしょうか?class クラス名(object): と書くとobjectクラスを継承することになります。Pythonのクラスは基本的にobjectクラスを継承します。なのでいちいち書くのが面倒なので省略形としてclass クラス名: と書きます。Pythonの公式ドキュメントでもいちいち(object)と書いてはいないので、書かないのが普通かな 、と思います!
公式ドキュメント▶︎docs.python.org/ja/3/tutorial/classes.html#class-definition-syntax
また、クラスの継承に関する動画もアップしているので、継承の意味が分からなけらば、ご参考にしてください😉
継承▶︎ruclips.net/video/_F6-TgtInTA/видео.html
おー!😳なるほど!
リンク先の動画も参考になりますね!😂
クラスの扱い方は私にとって難しいもので、まだまだ理解したとは言えないのですが、これからは(object)は省略した、すっきりとした形で覚えることにします!ありがとうございました!!😁
Woooo my first language!!
Thank you!
Pythonのクラスは継承より委譲?
ってのをよく目にするのですがその辺りよくわかんないんですよね…
仕事上そこまで大規模なもの作ってるわけじゃないんで気にせずクラス継承使ってるんですが。。。
コメントありがとうございます!!
クラスの委譲については「is-aの関係 has-aの関係」という動画で解説しているので、よければ見てみてください😊 has-aの関係が委譲になります!
is-a, has-a▶︎ ruclips.net/video/A8854NYDTdo/видео.html
こんにちは! いつも大変参考にさせてもらってます!
さて、質問なのですが本動画で使用している「code.py」にメイン処理を記載するmain関数を作るとします。
作ったmain関数はif __name__ == '__main__':の中で実行します。
if __name__ == '__main__': はクラス外に書くのが一般的なのかな〜?と思っているのですが
main関数もクラス外に書くのが一般的でしょうか?
ご質問ありがとうございます😊
if __name__ == '__main__': は一番外に書きます!
main関数もクラスの外に書きます!
イメージとしてcode.pyの中身はこんな感じです😉
=================
import os
class User:
def __init__(self):
pass
def main():
pass
if __name__ == '__main__':
main()
@@pythonvtuber9917
import os
class Kansha:
def __init__(self):
pass
def main():
print('Thanks😉')
if __name__ == '__main__':
main()
大変わかりやすくありがたいです。一つ質問なのですが、クラス変数はコンストラクタの上に書くようにと説明されているのですが、試しにコンストラクタの下にインテンドを揃えて書いてみたところ、同じ挙動になるのですが、これはたまたま上手く行ったと言うことで、本来の書き方ではないと言うことでしょうか?
ソースコードの可読性やメンテナンスのしやすさで推奨されてるだけです。
23:00のコードでも23:22のコードでも「self.」がついていると思いますが、前者のどこにselfがついていないのでしょうか
スクショして見比べてみましたが、違いを見つけられませんでした
'sum_score'のところに'self'がついていません。
'self'がない'sum_score'は'calc_avg_score()'が呼ばれたときに
生成されてcalc_avg_score()'の処理が終わると'sum_score'は消えてしまうので
外部からアクセスできません。
同じようにやったのにエラーでさきすすまない、、、
----> 1 class SchoolReport:
2 def __init__(self, student_name, math_score, jp_score, en_score):
3 self.student_name = student_name
Input In [41], in SchoolReport()
10 avg_score = sum_score/3
12 return avg_sore
---> 14 sr_a = SchoolReport('田中A', 100, 30, 50)
15 avg_a = sr_a.calc_avg_score()
16 print(f'Aさんの3教科平:{avg_a}')
TypeError: __init__() takes 2 positional arguments but 5 were given
エラー文言からすると、イニシャライザの引数の数が定義と違っているようですが、その実行ファイルのコード全部がわからないと、どこが間違っているのかちょっと分からないですね😵
エラー解消方法の動画も出しているので、ご覧ください!
▶︎ ruclips.net/video/n-CEndcgAFY/видео.html
python初心者です、クラスのインポートについて質問させていただきたいです。
A.pyというモジュールから、XというクラスをA_test.pyにインポートする際、(A.pyとA_test.pyは同じ階層の同じパッケージ)
from A import X
と書いてインポートして、Xからabcというオブジェクトを作って表記するために
abc = X()
X.abc.print()
と書いたのですが、(Xにはprintメソッドがあります)
type object X has no attribute abc
と出てしまいます。A.py内ではXは正常に動きprintも動作したのでクラス自体には問題がないと思うのですが、どこを治せば良いでしょうか...?よろしくお願いします...
abcというオブジェクトを作ったら、abc.print()で呼び出せませんか?また、メソッド名として「print」を使うと、組み込み関数のprint()と被るので名前を変更したほうが良いですね!
お世話になります。今回のクラスは前回に比べて中身が濃くなっているので、時間がかかりました。前回と今回両方見ないと初心者としては辛いかもしれません。__init__がわかってきました。ありがとうございます。
ご視聴いただきありがとうございます😊
初心者の場合、クラスは一気に理解するのは難しいですよね!色々クラスを扱う中で、慣れていってもらえたらとおもます!
よく参考書に関数だけでいいのにクラスで書かれていることがあります。
もし、大規模な開発を行うのであれば、クラスでかく意味がわかるのですが、100行程度でもクラスにわけて作っているものが多いです。これはなぜなのでしょうか。
それぞれの役割をはっきりとしたいためなのか、筆者が大規模な開発に携わっていて…だから癖でかいてしまうのか…色々と考えてしまいます。
また、今後のプログラム作成においてdefで一つのファイルにおさめるよりもクラスを普段から意識をして作っていった方がいいのでしょうか。
ご質問ありがとうございます!とても鋭い質問ですね😊
クラスも関数も1つの道具なので、どちらを使うかは「どのように設計して、どのようにアプローチしたいか?」の違いでしかないと思います。これは習慣であったり、個人の好みの違いであって、どちらが正しいということはないです。
ただ、オブジェクト指向、カプセル化・継承・ポリモフィズムといったものを使いたい場合は、必然的にクラスを使用することになりますね。オブジェクト指向については動画を出しているので、よければ見てみてください!
オブジェクト指向動画 ▶︎ ruclips.net/video/XWxcxchJgbI/видео.html
「クラスを普段から意識をして作っていった方がいいのか?」の質問については、クラス作成に慣れているのであれば意識してクラスを使わなくていいと思います。「クラスを作ることはできるけど、あえて関数を使っている」のと、「関数しか使えないから関数を使っている」のでは、前者の方が良いと思います!なので、クラスに慣れてないのなら、意識してクラスを使ってみてもいいと思います😊
@@pythonvtuber9917
参考の動画をありがとうございます。カプセル化や継承などを用いるときは、クラスの作成ということなので、目的に合わせて作っても良さそうですね!
クラスを作ると再利用や内容の変更に強いプログラムができると思うので、複雑なプログラムを作るときにはクラスを用いること、それ以外はdefのみで一つのファイルで気軽に作ろうと思いました笑
回答ありがとうございました😊
@@mohimohi8581
データ解析(science, marketing) くらいだったら関数でもいいような気がしますね。
でも少し込み入った解析、たとえば、マウス操作で画像解析をしたい時なんかはクラスを使った方がいいかもしれません。
クラスを使わない場合でも、一つの関数に全ての解析内容を組み入れるよりかはコンパートメントを意識して、改変しやすいように幾つもの関数を用意して組み合わせて使った方がいいような気がします。
アンダースコアをアンスコって略してる人がいたんですが、この呼び方ってメジャーなんですか?
普通に聞くし、私も使う時ありますね!
わかりやすかったです!
あと、sumをますって読んじゃってますよ
コメントありがとうございます!
わゎゎ.....15:19あたりで確かに言い間違えてますね😂
コードは正しいので聞き流してもらえたらと思います😇
c++のクラスでのSTATIC変数とクラス変数は似てますね
まんまかいたのになぜか。 name 'SchoolReport' is not definedってでる。。。どうして。。。
「SchoolReport」が定義されてないようですが、コード内にスペルミスなどはありませんか?
エラーが出力されるソースコードを載せていただけたら、お役に立てるかもです!!
print文の中のAさん、Bさんを自動で出力するコードはありますでしょうか?
すみません、質問の内容がよく理解できなかったのですが「自動で出力」というのは具体的にどのようなイメージが教えていただけますでしょうか?
せっかくなのでデザインパターンの動画も...
コメントありがとうございます😊
デザインパターンの動画も出したいと思っていました!!すぐにはアップできないですが、作成したいと思います!!
@@pythonvtuber9917 楽しみに待ってます!!
self.student_name = student_name
の行がエラーと出ます
ご質問ありがとうございます!
エラー文はどのようなものでしょうか?
また、エラー解消のための動画を出しているので、よければ見てみてください😉
▶︎ ruclips.net/video/n-CEndcgAFY/видео.html
プロパティの動画から来ました。こちらの録音環境の方が、キンキンした感じが無くて聞きやすいですね。
コメントありがとうございます!
音質が動画によってマチマチで申し訳ないです😵 出来る限り音割れがないように動画作成を頑張ります!!