python-coding技巧

1)将一个类实例化对象featuresres=FeaturesRes()(含有init,变量形式为带self形式的实例变量),转换成字典:for key, value in features_res.dict.items():

2)setattr(features_res, key, None)

setattr(object, name, value)
参数
object -- 对象。   #实例化的对象;
name -- 字符串,对象属性。
value -- 属性值。
返回值
无。
实例
以下实例展示了 setattr 的使用方法:
>>>class A(object):
...     bar = 1
... 
>>> a = A()
>>> getattr(a, 'bar')          # 获取属性 bar 值
1
>>> setattr(a, 'bar', 5)       # 设置属性 bar 值
>>> a.bar
5

3)return value>0,返回的是一个布尔类型的值,True或者False;或者:
4)

两种不同类的区别:1)用作返回存储变量的类,__init__输入需要指定;如下:
class RiskRsp(object):
    """
    风险返回信息
    """
    def __init__(self, status_code=None, status_message=None,
                 evaluate_dto=EvaluateDto(), features_res = FeaturesRes(),
                 company_name=None):
        self.status_code = status_code
        self.status_message = status_message
        self.features_res = features_res
        self.evaluate_dto = evaluate_dto
        self.company_name = company_name
 返回的时候类似会这样写:
 return EvaluateDto(hy_rank = hy_rank,hyRankPlot =hyRankPlot,hyRankXPosition =hyRankXPosition,
                           similary_com_cnt=similary_com_cnt,
                           risk_score=new_risk_score, revoke_prob=new_revoke_prob,
                           revoke_company_name_list=revoke_company_name_list,
                           risk_rank=risk_detail_dto.risk_rank,
                           hy_risk_rank_prob_list = self.__hy_name_map_risk_info_list[big_hyname.decode('utf-8')], big_hyname=big_hyname)
2)用作存储初始化变量的类,__init__中不需要指定输入变量,如下:
class FeaturesRes(object):
    def __init__(self):
        # 成立年限
        self.established_years = 0
        # 行业企业吊销率
        self.industry_dx_rate = 0.0001
        # 注册资本变更次数
        self.regcap_change_cnt = 0
        # 股东变更次数
        self.share_change_cnt = 0

4)可以将实例化类对象定义为实例变量,(实例变量原始定义:定义在方法中的变量,只作用于当前实例的类,)如下:

class CompanyFeaturesTimeSvc(CompanyFeaturesSupper):
    def __init__(self):
        self.companies_features_time_db_svc = CompaniesFeaturesTimeDbSvc()
        self.model = CompaniesFeaturesTimeModel()
        self.company_feature_helper = CompanyFeatureHelper()

5)静态变量(在class内,但不在class里面的方法内,类可以直接访问,实例化的类对象也可以调用共享访问):

class RiskRank(Enum):
    SUPER_HIGH = 1  # 极高风险
    HIGH = 2  # 高风险
    SEC_HIGH = 3  # 次高风险

6)下面例子中,class的init()方法内,除了其他实例变量(本质是将类实例化对象当做实例变量)外,还有个path,该path只在此处用了6次,类里面的其他方法不能使用,跟静态变量相区别,因此可以为局部变量,只在init()方法使用。

class EvaluateSvc(object):
    """
    模型评估封装类
    """

    def __init__(self):
        self.__prob_map_output = ProbMapOutput()
        self.__c_o_db_svc = CompaniesOutputDbSvc()
        self.lgbm_pre = LGBMPredictModel()
        path = os.getcwd()
        path = StringUtils.right_cut_by_word(path, '/test')
        path += '/resource'
        self.__hy_name_map_risk_info_list = JsonUtils.load_json_file(path, 'new_hy_risk_rank_info.json')

7)实例变量的两种情况,1)跟输入有关的实例化变量;2)跟输入无关的实例变量。

1)跟输入有关的实例化变量;
class A():
def __init__(self,name):
self.name = name
此处self.name就跟输入有关,
a=A('haha')
a.name = 'haha'
a1=A('huhu')
a1.name = 'huhu'

2)跟输入无关的实例变量。
 def __init__(self):
self.__POSITIVE_LIST = ['bidding_cnt', 'trade_mark_cnt']
此处的self.__POSITIVE_LIST实例变量就跟输入无关,在类中任何地方引用都是 ['bidding_cnt', 'trade_mark_cnt']这个值。

猜你喜欢

转载自blog.csdn.net/sinat_26566137/article/details/80165448