山内セミナーⅠ(2022/06/22)
関連サイトと資料
サンプルプログラム - クラス変数/クラスメソッド/スタティックメソッド
class MyClass:
count = 0 # クラス変数
def __init__(self):
MyClass.count += 1
print(f'you made {MyClass.count} instance(s)')
class MyClass:
count = 0 # クラス変数
def __init__(self):
MyClass.count += 1
print(f'you made {MyClass.count} instance(s)')
@classmethod # クラスメソッドの定義
def get_count(cls):
print(cls.count) # クラス変数には「cls.クラス変数」としてアクセス
MyClass.get_count()
instance1 = MyClass()
instance2 = MyClass()
instance2.get_count()
class MyClass:
count = 0
def __init__(self):
MyClass.count += 1
print(f'you made {MyClass.count} instance(s)')
@classmethod # クラスメソッドの定義
def get_count(cls):
cls.another_get_count()
@staticmethod
def static_get_count():
print('count:', MyClass.count)
MyClass.static_get_count()
instance = MyClass()
instance.static_get_count()
サンプルプログラム - クラスを使ってスタックとキューを作成する
class MyStack1:
def __init__(self):
self.stack = [] # 空のリストをスタックに保存するデータの入れ物とする
def push(self, item):
pass # 取りあえず何もしない
def pop(self):
pass # 取りあえず何もしない
class MyStack2:
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
def pop(self):
pass # 取りあえず何もしない
mystack = MyStack2()
mystack.push(0) # スタックに「0」をプッシュ(リストの末尾に「0」を追加)
mystack.push(1) # スタックに「1」をプッシュ(リストの末尾に「1」を追加)
mystack.push(2) # スタックに「2」をプッシュ(リストの末尾に「2」を追加)
print(mystack.stack) # MyStackクラスのインスタンスのインスタンス変数の値を表示
class MyStack3:
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
def pop(self):
result = self.stack[-1] # 末尾の要素を変数に取り出す
del self.stack[-1] # リストから要素を削除する
return result # リスト末尾から取り出したデータを返送する
mystack = MyStack3()
mystack.push(0)
mystack.push(1)
print(mystack.pop())
print(mystack.pop())
class MyStack4:
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
def pop(self):
return self.stack.pop()
mystack = MyStack4()
print(mystack.pop())
class MyStack5:
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
def pop(self):
if len(self.stack) == 0:
return None
return self.stack.pop()
mystack = MyStack5()
mystack.push(0)
print(mystack.pop())
print(mystack.pop())
class MyQueue:
def __init__(self):
self.queue = []
def enqueue(self, item):
self.queue.append(item)
def dequeue(self):
if len(self.queue) == 0:
return None
result = self.queue[0]
del self.queue[0]
return result
myq = MyQueue()
myq.enqueue(0)
myq.enqueue(1)
print(myq.dequeue())
print(myq.dequeue())
print(myq.dequeue())
mystack = MyStack5()
print(str(mystack))
print(repr(mystack))
class MyStack6:
def __init__(self, *args):
self.stack = []
for item in args:
self.stack.append(item)
def push(self, item):
self.stack.append(item)
def pop(self):
if len(self.stack) == 0:
return None
return self.stack.pop()
mystack = MyStack6(1, 2, [3, 4])
print(mystack.stack)
class MyStack7:
def __init__(self, *args):
self.stack = []
for item in args:
self.stack.append(item)
def push(self, item):
self.stack.append(item)
def pop(self):
if len(self.stack) == 0:
return None
return self.stack.pop()
def __repr__(self):
return 'MyStack(' + repr(self.stack) + ')'
mystack = MyStack7(1, 2, [3, 4])
print(repr(mystack))
print(mystack)
class MyStack8:
def __init__(self, *args):
self.stack = []
for item in args:
self.stack.append(item)
def push(self, item):
self.stack.append(item)
def pop(self):
if len(self.stack) == 0:
return None
return self.stack.pop()
def __repr__(self):
return 'MyStack(' + repr(self.stack) + ')'
def __str__(self):
return str(self.stack)
mystack = MyStack8(1, 2, [3, 4])
print(repr(mystack))
print(mystack)
mystack = MyStack8(1, 2, [3, 4])
for item in mystack:
print(item)
class MyStack9:
def __init__(self, *args):
self.stack = []
for item in args:
self.stack.append(item)
def push(self, item):
self.stack.append(item)
def pop(self):
if len(self.stack) == 0:
return None
return self.stack.pop()
def __repr__(self):
return 'MyStack(' + repr(self.stack) + ')'
def __str__(self):
return str(self.stack)
def __iter__(self):
return iter(self.stack)
mystack = MyStack9(1, 2, [3, 4])
for item in mystack:
print(item)
class MyStack10:
def __init__(self, *args):
self.stack = []
for item in args:
self.stack.append(item)
def push(self, item):
self.stack.append(item)
def pop(self):
if len(self.stack) == 0:
return None
return self.stack.pop()
def __repr__(self):
return 'MyStack(' + repr(self.stack) + ')'
def __str__(self):
return str(self.stack)
def __iter__(self):
return iter(self.stack)
def __getitem__(self, key):
return self.stack[key]
mystack = MyStack10(1, 2, [3, 4])
print(mystack[0])
print(mystack[0:2]) # スライスできるか?
サンプルプログラム - クラスの継承
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def hello(self):
print('Hello,', str(self.name))
def get_age(self):
return self.age
kawasaki = Person('kawasaki', 250)
isshiki = Person('isshiki', 19)
kawasaki.hello()
print(isshiki.get_age())
class Student1(Person):
pass
kawasaki = Person('kawasaki', 250)
isshiki = Student1('isshiki', 18)
print(type(kawasaki))
print(type(isshiki))
isshiki.hello() # 基底クラスのメソッドを呼び出す
class Student2(Person):
def __init__(self, name, age, school):
self.name = name
self.age = age
self.school = school
def get_school(self):
return self.school
class Student3(Person):
def __init__(self, name, age, school):
super().__init__(name, age)
self.school = school
def get_school(self):
return self.school
isshiki = Student3('isshiki', 18, 'Imperial univ')
isshiki.hello()
print(isshiki.get_school())
class Student4(Person):
def __init__(self, name, age, school):
super().__init__(name, age)
self.school = school
def get_school(self):
return self.school
def hello(self):
super().hello()
print('You are a student of', self.school)
isshiki = Student4('isshiki', 18, 'Imperial univ')
isshiki.hello()