Python如何访问成员函数中赋值的类成员属性?附报错解决
问题原因
- 核心错误是混淆了类、成员方法、类实例的属性归属:
url是绑定到User_data类实例的属性,askFor_info是类定义的成员函数,本身是独立的function对象,不存在url属性,直接写User_data.askFor_info.url属于从函数对象上找属性,必然触发属性不存在的报错。 - 代码里存在拼写bug:
askFor_info方法内写的是self.prodcut_name,和初始化方法里定义的self.product_name字母顺序错了,就算解决了属性访问问题,后续也会因为拼写不一致触发属性报错。
修复方案
- 先创建
User_data类的实例对象,初始化时可以给url和product_name传空字符串当默认值,不需要提前传有效值 - 调用这个实例的
askFor_info()方法,执行输入逻辑,方法会直接把用户输入的值赋值给当前实例的对应属性 - 从创建好的实例对象上读取
url属性,传给driver.get()即可
修正后完整代码
class User_data: '''Get important info ab user''' def __init__ (self, url="", product_name=""): self.url = url self.product_name = product_name def askFor_info (self): self.url = str(input("Please enter the url of the site you wish to make purchase from: ")) # 修正拼写错误:prodcut_name -> product_name self.product_name = str(input("Please enter the name of the product you wish to purchase: ")) print(f"{self.url},", f"{self.product_name}") # Selenium业务调用部分 # 1. 实例化用户数据对象 user_info = User_data() # 2. 调用方法获取用户输入,给实例属性赋值 user_info.askFor_info() # 3. 从实例中读取url传入driver.get driver.get(user_info.url)
额外说明
你之前在askFor_info里注释掉的person = User_data(url = self.url, product_name= self.product_name)逻辑完全多余,方法内的self就指向当前正在操作的实例,直接给self.xxx赋值就完成了属性修改,不需要额外新建类实例。
内容的提问来源于stack exchange,提问作者mictrn
相关产品推荐
相关产品推荐

