🧓

Pythonのクラスについて学んでみる

2023/05/22に公開

独特な記号と文法を理解したい

以下に、Python 3を使用してクラス構文の学習を行うプログラムの例を示します。それぞれ、クラスの継承、コンストラクターとデストラクター、変数とメソッドの使用の例を含んでいます。

クラスの継承の例:

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement the 'speak' method.")


class Dog(Animal):
    kind = 'canine'  # クラス変数

    def speak(self):
        return "Woof!"


class Cat(Animal):
    kind = 'feline'  # クラス変数

    def speak(self):
        return "Meow!"


dog = Dog("Buddy")
cat = Cat("Whiskers")

print(dog.name, dog.speak())  # 出力: Buddy Woof!
print(cat.name, cat.speak())  # 出力: Whiskers Meow!

この例では、Animal クラスを定義し、Dog クラスと Cat クラスが Animal クラスを継承しています。Animal クラスには name 属性と speak メソッドがありますが、speak メソッドはサブクラスで実装する必要があります。Dog クラスと Cat クラスでは、speak メソッドが実装されており、それぞれの適切な音声を返します。

コンストラクターとデストラクターの例:

class MyClass:
    def __init__(self):
        print("Constructor called")

    def __del__(self):
        print("Destructor called")


obj = MyClass()  # 出力: Constructor called
del obj         # 出力: Destructor called

この例では、MyClass クラスを定義し、init メソッドを使用してコンストラクターを定義しています。コンストラクターはオブジェクトが作成されるときに自動的に呼び出されます。また、del メソッドを使用してデストラクターを定義しています。デストラクターはオブジェクトが破棄されるときに自動的に呼び出されます。

変数とメソッドの使用の例:

class Person:
    species = 'human'  # クラス変数

    def __init__(self, name):
        self.name = name  # インスタンス変数

    def say_hello(self):
        return f"Hello, my name is {self.name}."

    @classmethod
    def get_species(cls):
        return cls.species

    @staticmethod
    def make_sound(sound):
        return sound


person = Person("Alice")
print(person.name)                 # 出力: Alice
print(person.say_hello())          # 出力: Hello, my name is Alice.
print(Person.get_species())        # 出力: human
print(Person.make_sound("Meow"))   # 出力: Meow

この例では、Person クラスを定義し、以下の要素を含んでいます:

species:クラス変数として定義された 'human' という値を持つ変数です。
init:コンストラクターメソッドで、name という引数を受け取り、self.name としてインスタンス変数を設定します。
say_hello:インスタンスメソッドで、インスタンスの名前を含む挨拶文を返します。
get_species:クラスメソッドとして定義されたメソッドで、クラス変数 species の値を返します。
make_sound:静的メソッドとして定義されたメソッドで、引数として受け取った音声を返します。
上記の例では、Person クラスのインスタンスを作成し、異なるメソッドや変数にアクセスしています。インスタンス変数 name には "Alice" が設定されており、say_hello メソッドはそれを使用して挨拶文を生成します。get_species メソッドはクラスメソッドとして呼び出され、クラス変数 species の値である 'human' を返します。make_sound メソッドは静的メソッドとして呼び出され、引数として与えられた音声をそのまま返します。

Discussion