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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1343閲覧

id()で得られた値のオブジェクトにアクセスしたい

kanka

総合スコア26

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/05/26 05:34

編集2019/05/26 05:49

あるオブジェクト(obj)のidをID=id(obj)で受け取り、
IDからobjをメンバ変数を呼び出すことはできますか?
オブジェクトへの参照を別なオブジェクトのメンバ変数として受け取り、参照先のメンバ変数を読み取れるようにしたいです。

イメージとしては以下のプログラムで、最終行の動かし方を教えていただきたいです。
よろしくお願いします。

python

1#最終行を動かしたいです 2 3class test: 4 #connect_idを初期化 5 self.connect_id = -1 6 def __init__(self, a): 7 self.a = a 8 def getid(self, test_obj): 9 #class testの別のオブジェクトのidを取得 10 self.connect_id = id(test_obj) 11 def get_a_from_id(self): 12 #connect_idを持っているなら 13 if self.connect_id != -1: 14 #connect_idが振られたオブジェクトに含まれるaを取得 15 #ここがわかりません 16 self.connect_a = connect_idのオブジェクト.a 17 18 19obj1 = test(1) 20obj2 = test(2) 21 22#obj1のself.connect_idにobj2のidを格納 23obj1.getid(obj2) 24 25#self.connect_idのオブジェクト(obj2)のself.aを取得 26 27obj1.get_a_from_id() 28

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

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

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

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

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

guest

回答2

0

単純に以下のように他オブジェクト(への参照)を保持するだけでよいと思いますが、いかがでしょうか。

Python

1class test: 2 3 def __init__(self, a): 4 self.a = a 5 self.connect_obj = None 6 7 def connect(self, test_obj): 8 # 他のオブジェクトを指すように 9 self.connect_obj = test_obj 10 11 def get_connect_a(self): 12 # 他のオブジェクトを指しているなら 13 if self.connect_obj is not None: 14 return self.connect_obj.a 15 16obj1 = test(1) 17obj2 = test(2) 18 19# obj2を指すように 20obj1.connect(obj2) 21 22# オブジェクト(obj2)のself.aを取得 23print(obj1.get_connect_a()) # 2

投稿2019/05/26 06:00

can110

総合スコア38264

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

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

kanka

2019/05/26 06:03

ありがとうございます。 メンバ変数に実体がわたるというわけではないのですね。 逆に、obj1にobj2の実体を丸ごとコピーしてメンバ変数に追加するという方法はあるのでしょうか?
kanka

2019/05/26 06:04

先ほどタッチの差で自己解決してしまいすみません。 実験して調べてから質問するべきでした。 ありがとうございます
can110

2019/05/26 06:19

> 逆に、obj1にobj2の実体を丸ごとコピーしてメンバ変数に追加するという方法はあるのでしょうか? おそらくcopy.deepcopyでいけるかと。以下の過去質問を参照ください。 https://teratail.com/questions/40811
kanka

2019/05/26 06:37

Pythonへの理解が少し深まった気がします。 ありがとうございます!
guest

0

自己解決

オブジェクトのメンバ変数にオブジェクトを代入しても参照渡しでした。
よってidは必要ありませんでした。お騒がせしました。

python

1class test: 2 def __init__(self, a): 3 self.a = a 4 def connect(self, test_obj): 5 self.connect_obj = test_obj 6 def call(self): 7 print(self.connect_obj.a) 8 print(str(id(self.connect_obj))) 9 self.connect_obj.a = 10 10 print('変更後:'+str(id(self.connect_obj))) 11obj1 = test(1) 12obj2 = test(2) 13 14print("obj2:"+str(id(obj2))) 15obj1.connect(obj2) 16obj1.call() 17print(obj2.a)

結果

obj2:120849968
2
120849968
変更後:120849968
10

投稿2019/05/26 06:01

kanka

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問