[過去ログ] くだすれPython(超初心者用) その46【Ruby禁止】 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
768(2): デフォルトの名無しさん [sage] 2020/02/21(金) 16:02:46.88 ID:x3GQj6xQ(1) AAS
インスタンス変数についての質問です
他言語(c/c++/c#)から入った人間の例に漏れずself/clsって何なの…となりました
で色々見ているのですが1番大きな疑問はインスタンス変数です
サンプル見ると大体コンストラクタでself.x=とかやってますがこのxはどこで定義されているのですか?
仮にこれが定義としてもコンストラクタや関数内部で定義したものがスコープ外でつかえるのは妙です
それに関数で新しく定義出来てしまうならインスタンシエイト時にそのオブジェクトがどのようなメンバを持つのかの情報が欠落していることになります
この辺りの解説を探しても見つけられませんでした
ご教授頂ければ幸いです
770(1): デフォルトの名無しさん [sage] 2020/02/21(金) 16:35:43.13 ID:RiyafmFC(1) AAS
>>768
>インスタンシエイト時にそのオブジェクトがどのようなメンバを持つのかの情報が欠落していることになります
オブジェクトがどういうメンバを持つかは静的じゃなく動的
インスタンス化後にインスタンス変数やメソッドを追加できる
クラスはディクショナリみたいなものだと思っておけばいいよ
https://ideone.com/aAGA0y
>仮にこれが定義としてもコンストラクタや関数内部で定義したものがスコープ外でつかえるのは妙です
メソッドの第1引数にレシーバのオブジェクトが渡されるので
それを`self`という名前の引数で受けてメソッド内では渡されたレシーバを使って
`self.x`とかでインスタンス変数を参照してるのでスコープ外ではない
ちなみにselfは慣習として使われてる変数名であってhogeとかに変えても問題なく動く
773: デフォルトの名無しさん [sage] 2020/02/21(金) 17:31:14.15 ID:2TMdipPT(1/2) AAS
>>768
Ruby では、デフォルトでインスタンス変数は、private だから、
アクセサー(attr_accessor)で宣言しないと、クラス外部からアクセスできない
class A
attr_accessor :x
def initialize
@x = 1
end
end
p A.new.x #=> 1
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.039s