pythonのクラス

pythonのクラスについて

クラスの定義の仕方

以下のように定義します。

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

class EmailPerson(Person):
    def __init__(self, name, email):
        super().__init__(name)
        self.email = email
    def __str__(self):
        return "name:{} email:{}".format(self.name, self.email)

p = EmailPerson("井川", "hoge@hoge.com")
print(p)
name:井川 email:hoge@hoge.com

getter,setterについて

Pythonは、すべての属性とメソッドが公開であり、プログラマーが行儀よくふるまうのが前提になっているので、ゲッター、セッターを書く必要はない

と、前提としたうえで、それでも定義したい場合どうするか

  • 方法1

name = property(get_name, set_name)で定義する方法

  class Duck():
      def __init__(self, name):
          self.__name = name
      def get_name(self):
          return self.__name
      def set_name(self, name):
          self.__name = name
      name = property(get_name, set_name)
  • 方法2

@property @name.setterで定義する方法

  class Duck():
      def __init__(self, name):
          self.__name2 = name
      @property
      def name(self):
          print('inside the getter')
          return self.__name2
      @name.setter
      def name(self, name):
          print('inside the setter')
          self.__name2 = name

特殊メソッド

特殊メソッドは、’__ __‘で囲まれています。

これを定義することで、下記のようなことができます。

比較のための特殊メソッド

メソッド 意味
eq(self, other) self == other
ne(self, other) self != other
lt(self, other) self < other
le(self, other) self <= other
ge(self, other) self >= other

算術計算のための特殊メソッド

メソッド 意味
add(self, other) self + other
sub(self, other) self - other
mul(self, other) self * other
floordiv(self, other) self // other
truediv(self, other) self / other
mode(self, other) self % other
pow(self, other) self ** other

参考サイト

以上です。

勉強に使用している本

非常に分かりやすくておすすめです。

プログラムは経験あるけどPythonは初心者って方に、絶対おすすめの1冊です。

comments powered by Disqus