LoginSignup
0
1

More than 3 years have passed since last update.

pythonのクラスへの理解奮闘記(2)仕事それだけじゃないよね?_クラスの継承について

Last updated at Posted at 2020-02-26

前回までのあらすじ

ひとまず、クラスのメリットを享受したコーディングと問題に対する(ここでは稟議書に対する処理)アプローチはクリアでき、さらに有難いことにクラスについてのコーディングお作法もご指摘かなうことができた。だが、しかし経理部員の私としては稟議書担当係君にもっと仕事をしてもらいたいという情念があります。

継続的な処理の話

前回確かに「新しく回ってきた稟議書」に対しての処理を具現化することはできました。しかし、「既に回ってきたかつ未だ使用開始していない固定資産」に対する処理がおざなりです。この「既に回ってきたかつ未だ使用開始していない固定資産」についてはまた新しく稟議書が回ってくることはありません。そのため、継続的にケアして毎月利用開始しているかどうか担当者にメールしなければならないのです。

新しく発生する仕事

ここで新しく発生する仕事としては具体的に、前回利用開始に至らなかった案件に対して定期的にメールを送る仕事です。これをクラスの承継という方法で実現しようと試みます。前のコーディングは「新しく回ってきた稟議書」に対する処理だったしね。

新しく書いたコード

qiita.rb

import openpyxl
import datetime



class NewAssets():
    def __init__(self,apdnum,apdmen,unitname,assetname,money):
        self.apdnum=apdnum
        self.apdmen=apdmen
        self.unitname=unitname
        self.assetname=assetname
        self.money=money

    #メールにPDFを添付する機能 担当者と担当部署から送り先メールアドレスを拾ってくる作業
    def make_mail(self):
        mail=("{}{}様お疲れ様です。経理部の固定資産担当です。稟議書No{}の{}についてですが、\
            \n当月の状況について利用開始しているか教えてください。また請求書もあれば請求書の添付も\
            \nよろしくお願いいたします。".format(self.unitname,self.apdmen,self.apdnum,self.assetname))
        print(mail)

    def insert_excel(self):
        wb=openpyxl.load_workbook("../data/発注固定資産管理表.xlsx")
        sh=wb.active
        for dt_row in range(2,50):
            if sh["A"+str(dt_row)].value!=None:
                continue
            else:
                sh["A"+str(dt_row)].value=self.apdnum
                sh["B"+str(dt_row)].value=self.unitname
                sh["C"+str(dt_row)].value=self.apdmen
                sh["D"+str(dt_row)].value=self.assetname
                sh["E"+str(dt_row)].value=self.money
                break
        wb.save("../data/発注固定資産管理表_{}_johannesrome作成.xlsx".format(datetime.date.today()))
#上記前回書いた基幹部分にあたるコード
#以下新規コード
#New_AssetsクラスからサブクラスであるBuying_Assetsを作成し属性としてconsume(費消)を追加

class BuyingAssets(NewAssets):
    def __init__(self,apdnum,apdmen,unitname,assetname,money,consume):
        super().__init__(apdnum,apdmen,unitname,assetname,money)
        self.consume=consume
    def make_buying_mail(self):
        if self.consume=="未":    
            print("{}の{}様お疲れ様です。経理部の固定資産担当です。先月未使用であった稟議書No{}の{}についてですが\
            \n当月の状況について利用開始しているか教えてください。また請求書もあれば請求書の添付も\
            \nよろしくお願いいたします。".format(self.unitname,self.apdmen,self.apdnum,self.assetname))
            sh["G"+str(dt_row)].value="✔"
        else:
            None



#以下出力コード
wb=openpyxl.load_workbook("../data/発注固定資産管理表_johannesrome作成.xlsx")
sh=wb.active
for dt_row in range(2,50):
    apdnum=sh["A"+str(dt_row)].value
    unitname=sh["B"+str(dt_row)].value
    apdmen=sh["C"+str(dt_row)].value
    assetname=sh["D"+str(dt_row)].value
    money=sh["E"+str(dt_row)].value
    consume=sh["F"+str(dt_row)].value
    m=Buying_Assets(apdnum,apdmen,unitname,assetname,money,consume)
    m.make_buying_mail()
wb.save("../data/発注固定資産管理表_johannesrome作成.xlsx")

前回ご指摘のあったコーディング作法は修正済み
クラスの継承としてBuyin_Assetsをサブクラスとして作成し、属性としてconsumeを追加しただけ
そして、今回してほしいプログラムとして未使用資産のメール文作成と、作成したら✔をエクセルに入れる機能。

ひとまず実行前のエクセルがこちら
assets_mail01.png

そして実行すると

assets_mail02.png

チェックが入りました(∩´∀`)∩

mail g.png

上手く来ました( ◠‿◠ )

総括

継承前のメソッドやデータを今回使うわけではなかったので設定テーマとアプローチとしては筋が悪いかなぁと思いました。もっと、個人的には継承前のメソッドもバリバリ活かすイメージがあったので。

ただ、コーディングをしてる最中わざわざdef make_buying_mail(self):のところでopenpyxlを開いて処理するコーディングだったところ途中クラスの属性を活かしたコーディングに変えられることに気づけたところがクラスのメリットかなぁと気づきを得られた次第です。クラスはどんどん使って早く慣れ親しみたいところです。

また、もっとこういうテーマだとクラスのメリットは享受できるよ~などいろいろご意見ありましたら、コメントお願いいたします!(`・ω・´)

0
1
2

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
1