推しミネラルウォーターはありますか?

あまり重要ではないと思うのですが、気になってしまって仕方ないので質問させていただきます。
下の画像のコードでエラーが検知されているので修正したのですが、正直無駄な気がしてなりません。
一般的なやり方であるだとか、後者にメリットがあれば後者にしようと思いますが、どうなんでしょう…?

「Pythonのあんまり重要じゃないこと」の質問画像

質問者からの補足コメント

  • 二枚目

    「Pythonのあんまり重要じゃないこと」の補足画像1
      補足日時:2018/08/25 00:39
  • 分かりずらくてすみません。
    インスタントを作ってそれを作るような予定がないクラスなので、わざわざインスタンスを作る(二枚目)必要があるのか、なくても(他の人が読みやすくなる等の)メリットがあるのか、ないことでデメリットがあるのか
    みたいなことを知りたいなと思っています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/08/25 04:10
  • 日本語がおかしかったです。
    インスタントを作ってそれを作るような
    >インスタントを作ってそれをつかうような

      補足日時:2018/08/25 04:18
  • ごめんなさい、教養がないのでなかなか言葉で伝えられず
    多分変な言い方になったと思います。
    私が言いたかったことは
    Python 3.6(64bit)
    class cls:
     def func(content):
      print(content)
    cls.func("text sample")
    >>>text sample
    #ここまで1
    ins = cls()
    ins.func()
    >>><__main__.cls object at xxxxxxxxxxxxxxxxxxxx>
    #これが2

    「1のデメリットは何か」「2のメリットはなにか」
    こんな具合です。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/08/25 04:38

A 回答 (4件)

>「1のデメリットは何か」「2のメリットはなにか」



そのクラスの使用目的によって変えれば良いです。


> インスタン「ス」を作ってそれを作るような予定がないクラスなので、わざわざインスタンスを作る(二枚目)必要があるのか

ないです。
クラスメソッドを定義して、それを使えば良いです。

逆に(複数の)インスタンスを使うようなクラスなら、インスタンスメソッドを定義すれば良いですね。
    • good
    • 0
この回答へのお礼

ふわっとした質問から知りたいことをくみ取っていただいて本当にありがとうございます。もやもやが晴れました。

お礼日時:2018/08/25 06:40

ふむ、なるほど、です。



実際問題、1.は単なる関数ですね。内部的にclassが使われてても、Pythonでは「関数」に自動的に変換される模様です。つまり、

def func(content):
 print(content)

と書いたのと「同じ結果になる」って事です。
(とは言っても、Python2.x系列と挙動が全く違うんで、ひょっとしたらBuggyな可能性があります。ちょっと調べてみないといけません)

2のケースだとさっき説明した通り、contentはインスタンスそのものを指します。従って、

ins = cls()

した時点で、contentはins自体を指してるんで、これ以上引数は受け付けません。
従って、"text sample"を渡してもエラーになりますね。

>>> ins("text sample")
Traceback (most recent call last):
 File "<pyshell#30>", line 1, in <module>
  ins("text sample")
TypeError: 'cls' object is not callable
>>>
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2018/08/25 06:40

> インスタントを作ってそれを作るような予定がないクラス



これもちょっと意味が分からないんですが、字面通り捉えると

「プログラムとして機能しなくて良い」

って意味になりそうなんで、そうなると、別に1つ目の書き方でも構わないんじゃないですかね?つまり「使わない」と言う前提だ、って事になりますから。
どっちにせよ、Pythonは「色々な事柄が」実行時に決まるんで、使わないコードがあって、警告が出てたとしても、「使わない限り」他の部分は影響を受けないでしょう。
だから1番目でも「使わない」前提だったら構わないんじゃないですかね?
この回答への補足あり
    • good
    • 0

何をやりたいんだか良く分かりませんが、Pythonの場合、メソッドの第一引数がそのクラスのインスタンスそれ自身を指しますよ。


(つまり、1つ目のコードのsourceは2つめのコードのselfと「全く同じ」で、作成されたインスタンス「そのもの」を指します)
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報