山内セミナーⅠ(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()