0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

python マジックメソッド一覧(2)

Posted at

前記事
の続きです。

__str__

インスタンスの文字列表現を取得。
toString的なやつ

Person.py
class Person:

    last_name = ''
    given_name = ''

    def __init__(self, last_name = '(性)', given_name = '(名)'):
        self.last_name = last_name
        self.given_name = given_name

    
    """分かりやすいようにフルネームを表示してあげる。"""
    def __str__(self)->str:
        return f'{self.last_name} {self.given_name}'

$ from Person import Person
$ person = Person() # インスタンス生成
$ print(person) # 文字列表現を取得
  (性) (名)
$ myPerson = Person('山田', '太郎') # プロパティ指定してインスタンス生成
$ print(myPerson)
  山田 太郎

__repr__

↑の続き

Person.py
class Person:

    last_name = ''
    given_name = ''

    def __init__(self, last_name = '(性)', given_name = '(名)'):
        self.last_name = last_name
        self.given_name = given_name

    
    """分かりやすいようにフルネームを表示してあげる。"""
    def __str__(self)->str:
        return f'{self.last_name} {self.given_name}'

    """デバッグ用にクラスプロパティ(性、名)表示"""
    def __repr__(self)->str:
        return f'{self.last_name=}, {self.given_name=}'
$ person = Person('河田', '陽菜')
$ print(person) # まだ__repr__は反映されていない
河田 陽菜
Person.py (strはreprより優先されるためコメントアウト)
class Person:

    last_name = ''
    given_name = ''

    def __init__(self, last_name = '(性)', given_name = '(名)'):
        self.last_name = last_name
        self.given_name = given_name

    
    """分かりやすいようにフルネームを表示してあげる。"""
    # def __str__(self)->str:
    #     return f'{self.last_name} {self.given_name}'

    """デバッグ用にクラスプロパティ(性、名)表示"""
    def __repr__(self)->str:
        return f'{self.last_name=}, {self.given_name=}'
$ person = Person('河田', '陽菜')
$ print(person)
  self.last_name='河田', self.given_name='陽菜'

__bool__

インスタンス自体の真偽値を返却

CSV読み取りで
ファイルが存在し かつ 1行以上読み込めたら正当なファイルとする

CSVReader.py
import csv
from pathlib import Path

class CSVReader:
    path = ""
    exists = False
    count = 0
    limit = 3

    def __init__(self, path):
        self.path = path

    """有効なファイルであるか(ファイルが存在し行が存在するか)の判定結果を返却"""
    def __bool__(self) -> bool:
        return (self.exists and self.count) >= 1
    
    def read(self):

        # 最初にファイルの存在チェック
        if Path(self.path).exists:
            self.__setExists__(True)
        else:
            pass

        with open(self.path) as f:
            rows = csv.reader(f, delimiter=",", quotechar='"')
            
            count = 0
            print(f'対象ファイルの先頭{self.limit}行を読み取ります。')

            for row in rows:
                
                print(", ".join(row))
                count = count + 1
                self.__setCount__(count)

                if (count >= self.limit):
                    break

    def __setExists__(self, exists=False) -> None:
        self.exists = exists

    def __setCount__(self, count=0) -> None:
        self.count = count
$ cat input.csv # 4行用意
"1","2","3"
"January","February","March"
"mutsuki","kisaragi","yayoi"
"one","two","three"
$ from CSVReader import CSVReader as reader
$ csv = reader('input.csv')
$ csv.read()
対象ファイルの先頭3行を読み取ります。
1, 2, 3
January, February, March
mutsuki, kisaragi, yayoi
$ csv.__bool__()
True # ファイルが存在し、行が読み取れたため
$ cat input.csv # ファイル削除し、試行
cat: input.csv: No such file or directory
$ $ csv.__bool__()
False # ファイルが存在しないため

もちらんifや3項演算子の評価対象として使用可能

$ file = 'valid' if csv else 'invalid' # インスタンス自体を真偽値として扱った際に__bool__の結果が反映される。
$ print(file)
  valid
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?