请老师讲解一下将类属性当函数使用的语法
来源:3-4 继承基类实现浏览器个性化

慕粉1504263447
2021-05-02
本章节中有如下的这些代码,在类属性后面加了括号,当做了函数使用,赋值给变量实现了创建对象。
self._option=option_type
chrome_option=self._option()
self._browser=browser_type
chrome=self._browser(self._path,options=self.options)
之前的学习中只知道:变量名=类名() 或者 变量名=函数名()是创建对象,实际上,变量名=属性名()也能创建对象是吧?
然后就自己写了一点测试代码,想要尝试使用一下,变量名=属性名()的创建对象的方法。但是报错了,请老师指点一下原因。
class A():
def init(self,_aaa):
self._aaa=_aaa
@property
def option(self):
like=self._aaa()
like.add_argument(“999”)
return like
if name == ‘main’:
a=A(“eee”)
print(a.option)
TypeError: ‘str’ object is not callable
尝试换了好几种数据类型传入,都不可调用。
请老师指点问题出在哪里。谢谢
1回答
-
托尼老师
2021-05-06
源码的实例属性self._option赋值的是各个浏览器的option类,option类当然是callable的,也就是可调用的,所以可以加括号调用;
你的测试代码中:
@property
def option(self):
like=self._aaa()定义了对实例属性self._aaa的调用,这从语法上来说是没有问题的,但是在调用和实参传入时:
a=A(“eee”)
print(a.option)出现了问题,实例属性self._aaa赋值的是字符串对象,而字符串对象的类型str中并没有定义__callable__方法,也就是str类型是不可调用的,所以会报类型错误TypeError: ‘str’ object is not callable。
同学,理解了吗?
00
相似问题