私は一日中この席に座っていましたが、もう少し疲れていました。
Pythonが初めてです。
作業中のプログラムをクラスの関数の束に書き直しただけで、すべてが台無しになりました。私かどうかはわかりませんが、Webでクラスを処理する方法に関する初心者向けのチュートリアルが見つからなかったので、いくつか質問があります。
最初クラスの__init__
セクションで、self.variable=something
で変数の束を宣言しました。
その関数でself.variable
を使用することにより、クラスのすべての関数でこれらの変数にアクセス/変更できることは正しいですか?言い換えれば、self.variable
を宣言することで、これらの変数を作成しました。クラスのスコープ内のグローバル変数ですよね?
そうでない場合、どのように自己を処理しますか?
第二に、クラスに引数を正しく渡すにはどうすればよいですか?いくつかのサンプルコードはクールです。
番目、クラススコープ外のクラスの関数を呼び出すにはどうすればよいですか?いくつかのサンプルコードはクールです。
Fouthly、別のclass INITIALCLASS
でclass OTHERCLASS
のインスタンスを作成し、OTHERCLASS
からINITIALCLASS
に変数を渡す方法いくつかのサンプルコードはクールです。
OTHERCLASS
からの引数でINITIALCLASS
から関数を呼び出したいです。これまでにやったことは。
class OTHERCLASS():
def __init__(self,variable1,variable2,variable3):
self.variable1=variable1
self.variable2=variable2
self.variable3=variable3
def someotherfunction(self):
something=somecode(using self.variable3)
self.variable2.append(something)
print self.variable2
def somemorefunctions(self):
self.variable2.append(variable1)
class INITIALCLASS():
def __init__(self):
self.variable1=value1
self.variable2=[]
self.variable3=''
self.DoIt=OTHERCLASS(variable1,variable2,variable3)
def somefunction(self):
variable3=Somecode
#tried this
self.DoIt.someotherfunctions()
#and this
DoIt.someotherfunctions()
変数をクラスに渡す方法や、self
を処理する方法、使用する場合と使用しない場合を明確に理解していませんでした。クラスのインスタンスを適切に作成する方法も理解できなかったでしょう。一般的に私はクラスの仕組みを理解していませんでしたので、私がわからないように私を助けて説明してください(私は理解していないようです)。または、詳細なビデオまたは読みやすいチュートリアルを参照してください。
ウェブで見つけたものはすべて非常に単純な例であり、それはあまり役に立ちませんでした。または、クラスやクラスメソッドインスタンスなどの非常に短い定義だけです。
必要に応じて元のコードを送信できますが、かなり長いです。
class Foo (object):
# ^class name #^ inherits from object
bar = "Bar" #Class attribute.
def __init__(self):
# #^ The first variable is the class instance in methods.
# # This is called "self" by convention, but could be any name you want.
#^ double underscore (dunder) methods are usually special. This one
# gets called immediately after a new instance is created.
self.variable = "Foo" #instance attribute.
print self.variable, self.bar #<---self.bar references class attribute
self.bar = " Bar is now Baz" #<---self.bar is now an instance attribute
print self.variable, self.bar
def method(self, arg1, arg2):
#This method has arguments. You would call it like this: instance.method(1, 2)
print "in method (args):", arg1, arg2
print "in method (attributes):", self.variable, self.bar
a = Foo() # this calls __init__ (indirectly), output:
# Foo bar
# Foo Bar is now Baz
print a.variable # Foo
a.variable = "bar"
a.method(1, 2) # output:
# in method (args): 1 2
# in method (attributes): bar Bar is now Baz
Foo.method(a, 1, 2) #<--- Same as a.method(1, 2). This makes it a little more explicit what the argument "self" actually is.
class Bar(object):
def __init__(self, arg):
self.arg = arg
self.Foo = Foo()
b = Bar(a)
b.arg.variable = "something"
print a.variable # something
print b.Foo.variable # Foo
クラスの使用方法の簡単な例を以下に示します。あなたが金融機関であるとします。顧客のアカウントをコンピューターで管理する必要があります。したがって、これらのアカウントをモデル化する必要があります。それがクラスの出番です。クラスの操作はオブジェクト指向プログラミングと呼ばれます。クラスを使用すると、コンピューターで実世界のオブジェクトをモデル化できます。それでは、単純な銀行口座をモデル化するには何が必要ですか?残高を保存する変数と、顧客の名前を保存する変数が必要です。さらに、バランスを増減するいくつかの方法。次のようになります。
_class bankaccount():
def __init__(self, name, money):
self.name = name
self.money = money
def earn_money(self, amount):
self.money += amount
def withdraw_money(self, amount):
self.money -= amount
def show_balance(self):
print self.money
_
これで、単純なアカウントとそのメカニズムの抽象的なモデルができました。 def __init__(self, name, money)
はクラスのコンストラクターです。メモリ内にオブジェクトを構築します。新しいアカウントを開設したい場合は、クラスのインスタンスを作成する必要があります。そのためには、コンストラクターを呼び出して必要なパラメーターを渡す必要があります。 Pythonコンストラクターはクラスの名前で呼び出されます:
_spidermans_account = bankaccount("SpiderMan", 1000)
_
スパイダーマンがM.J.に新しい指輪を購入したい場合、いくらかのお金を引き出す必要があります。彼は自分のアカウントでwithdraw
メソッドを呼び出します。
_spidermans_account.withdraw_money(100)
_
彼が呼び出すバランスを見たい場合:
_spidermans_account.show_balance()
_
クラスについてのすべては、オブジェクト、その属性、およびメカニズムをモデル化することです。オブジェクトを作成するには、例のようにインスタンス化します。値は、 `earn_money() 'のようなgetterおよびsetterメソッドを使用してクラスに渡されます。これらのメソッドはオブジェクト変数にアクセスします。クラスに別のオブジェクトを保存する場合は、コンストラクターでそのオブジェクトの変数を定義する必要があります。
クラスの重要なポイントは、instanceを作成し、そのインスタンスが一連のデータをカプセル化することです。したがって、変数がクラスのスコープ内でグローバルであると言うのは間違っています。むしろ、インスタンスは属性を保持し、そのインスタンスはそのコードのいずれかで独自の属性を参照できます(self.whatever
)。同様に、インスタンスを指定された他のコードは、そのインスタンスを使用してインスタンスの属性にアクセスできます。つまり、instance.whatever
。