关于类变量的默认值
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
同学,你好,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,如果对该类进行传值则使用传入的值
如果我的回答解决了你的疑惑,欢迎采纳!!祝学习愉快~~~~~
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星