关于类变量的默认值

关于类变量的默认值

class ApiException(Exception):
    err_code = '40001'
    err_msg = '不合法的调用凭证'
    def __init__(self,err_code=None,err_msg=None):
        self.err_code = self.err_code if self.err_code else err_code
        self.err_msg = self.err_msg if self.err_msg else err_msg
    def __str__(self):
        return 'Error:{0} - {1}'.format(self.err_code,self.err_msg)

def divide(n1,n2):
    if not isinstance(n1,int) or not isinstance(n2,int):
        raise ApiException('40000','两个参数必须是整数')
    if n2 == 0:
        raise ApiException('40002','除数不能为0')
    return n1 / n2
if __name__=='__main__':
    try:
        rest = divide(5,0)
        print(rest)
    except ApiException as e:
        print('出错了')
        print(e)

程序中又有实例变量,又有类变量,因为名称一样,所以其实上面的类变量 = 实例变量?

   err_code = '40001'
   err_msg = '不合法的调用凭证'

这里类变量有了默认值后,不管传入什么参数都取的是这个默认值

那为什么构造函数中又给err_code 和 err_msg取了默认值None?

构造函数中的if else写法是什么意思呢

   def __init__(self,err_code=None,err_msg=None):
       self.err_code = self.err_code if self.err_code else err_code
       self.err_msg = self.err_msg if self.err_msg else err_msg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
慕猿梦 2019-05-26 16:16:02

同学,你好,1.上面的类变量是不等于实例变量的噢,当运行这个py文件时,程序从上到下加载, ApiException类中默认得到Error:40001 - 不合法的调用凭证,

当在捕获异常时,首先捕获默认异常。所以不管传任何参数都取了默认值。

2.构造函数中给err_code 和 err_msg取了默认值None,

 def __init__(self,err_code=None,err_msg=None):
       self.err_code = self.err_code if self.err_code else err_code
       self.err_msg = self.err_msg if self.err_msg else err_msg

表示如果不给这个类传值,self.err_code, self.err_msg 为None,如果为None,则使用类变量的err_code,err_msg,如果对该类进行传值则使用传入的值

如果我的回答解决了你的疑惑,欢迎采纳!!祝学习愉快~~~~~

提问者 进击的蜂蜜 2019-05-24 22:18:38

我程序写错了。

是不是类变量中赋予了默认值,不管传入什么参数都会是默认值

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师