2017.11.02 scorecard项目问题小结

1. 花了很多时间小结gini的三种理解以及计算方法
2. 继续搞scorecard开源项目,有些东西反复改,并且产生bug,debug,改的原因还是对面向对象编程的规范有一些不明确的地方:
⑴. 构造函数constructor中调用instance method,本身程序是可以跑通的,但是我觉得很奇怪,我很少看到这种调用方法,我查了下,这种调用是ok的,但是要小心,如果存在override

class A(object):
    def __init__(self):
        self.greet()
    def greet(self):
        print('Hello from A')

class B(A):
    def __init__(self, name):
        self.name = name
        super(B, self).__init__()
       
    def greet(self):
        print('Hello from B', self.name)
       
B('zhang')

子类B重载了父类A的override方法,调用父类构造函数的时候会调用B的实例方法
如果self.name = name和super(B, self).__init__()位置交换,那么通过构造函数调用greet的时候,self.name还没有生成就会报错。
虽然说构造函数中调用实例方法没什么问题,但是这种方法少见,我查阅了很多著名开源module,一个例子也未能找到,和我的项目比较相近的是sklearn这个module,他的分类器也会接收很多参数,但是接收的时候并不会去校验,而是在真正fit的时候才做校验,我模仿了这种思路
⑵. 定义实例变量的时候,类似这样的定义是会报错的
def woe_replace(self, var_list = self.X_bin.columns):
因为self是一个约定俗成的‘关键字’,只在实例函数第一个位置起作用,后面调用实例变量的时候self就无法识别

总结一下,在整理这个module的时候,效率比较低下,原因是因为我太纠结一个格式和规范化的东西,我觉得我应该以方便易用为目标,先发布一个版本,在喷子的吐槽中不断迭代提高,从现在开始不要太纠结规范,就是干!

留言

熱門文章