質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Q&A

解決済

1回答

1365閲覧

Pythonにおけるオブジェクトの生成の方法について

h-tanaka

総合スコア1

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

0グッド

0クリップ

投稿2021/12/24 09:37

Pythonの初心者ですが,オブジェクトの生成方法について以下の3つのパターンがあることが分かりました(ほかにもあるかもしれません)。
以下の1のようにクラスからインスタンス化してオブジェクトを生成する場合が一般的ですが,例えば,2のようにopen関数を使ってファイルオブジェクトを生成する場合や,sqlite3モジュール内のconnnect関数を使ってコネクションオブジェクトを生成する場合があります。また,例えば3のようにコネクションオブジェクトのcursorメソッドを使ってカーソルオブジェクトを生成する場合があります。
1のようにクラスからオブジェクトを生成する場合以外に,2のように関数からオブジェクトを生成する場合や3のように別のオブジェクトのメソッドからオブジェクトを生成する場合があるのはなぜでしょうか。
2や3のように行うのはどのような場合でしょうか。
よろしくお願いいたします。

1.クラスからオブジェクトを生成する場合
オブジェクト = クラス(引数)
2.関数からオブジェクトを生成する場合
オブジェクト = 関数(引数)
例として
2-1(ファイルアブジェクト)
ファイルオブジェクト = open(引数)
2-2(SQLite3のコネクションオブジェクト)
コネクションオブジェクト = sqlite3.connnect(引数)
3.別のオブジェクトのメソッドからオブジェクトを生成する場合
オブジェクト = 別のオブジェクト.メソッド(引数)
例として
3-1(SQLite3のカーソルオブジェクト)
カーソルオブジェクト = コネクションオブジェクト.cursor()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

オブジェクトがどのような手順で生成されるかという話だと思いますが、いろいろな方法があって、わかりやすい方法を取っているだけだと思います。

まず、基本的に、パイソンで扱うものはすべてオブジェクトです。

python

1s = "Hello" 2n = 10 3l = [1, 2, 3]

sはstrクラスのオブジェクト、nはintクラスのオブジェクト、lはlistクラスのオブジェクトです。
そして、オブジェクトを作る方法にこのようにリテラルを使う方法もあるということです。

通常の関数でもこういうものを返すものは「関数からオブジェクトを生成する場合」と言えますね。

特定のクラスのオブジェクトを特に意識して作るときに、クラス名を持った関数(コンストラクタ)を使いますが、場合によっては、そのクラスが別の生成用のメソッドを用意することがあります。
クラス名でない関数名を使うことで目的がわかりやすくなったりします。
また、複数用意できるので、目的別に使いやすくすることができます。

クラスのメソッドが他のクラスのオブジェクトを返すのも、これまで見てきたとおり、特別のことではありません。

投稿2021/12/24 12:34

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h-tanaka

2021/12/24 13:59

TakaiYさん ご回答,ありがとうございます。 ご提示いただいたコードですが, f = 2.3 を追加して 以下のように,「オブジェクト = クラス(引数)」のように表すことができるので, ご提示いただいたコードは,クラスからオブジェクトを生成する方法の省略形と考えてよろしいでしょうか。 s = str("Hello") n = int(10) l = list([1, 2, 3]) f = float(2.3)
TakaiY

2021/12/24 15:15

回答にも書いたとおり、"Hello"などの表記はそれがそのまま、オブジェクトを表わしているので、「str()に文字列を引数で渡すとその文字列が返る」というような解釈になります。 なので、省略形ではありません。 ですが、int("10") は、 たんなる 「10」の代りとは言えるかもしれません。
h-tanaka

2021/12/25 02:17

TakaiYさん ご回答,ありがとうございます。 「a = str(2.3)」のstrは,数値を文字列に変換する関数と解釈することもできるし,「オブジェクト = クラス(引数)」としてクラスからオブジェクトを生成する際のstrクラスのクラス名と解釈することもできる,と考えてよろしいでしょうか
TakaiY

2021/12/25 03:32

問題ないと思います。 実際は、strは 'type'(型) という型を持っていますので、「オブジェクト = クラス(引数)」の方ですが、pythonにはクラス名を関数として呼ぶこともできるので、実装がどうなっているかはソースを見てみないとわかりませんね。
h-tanaka

2021/12/25 09:58

TakaiYさん ご回答,ありがとうございます。 よくわかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問