You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何访问成员函数中赋值的类成员属性?附报错解决

问题原因
  • 核心错误是混淆了类、成员方法、类实例的属性归属:url是绑定到User_data类实例的属性,askFor_info是类定义的成员函数,本身是独立的function对象,不存在url属性,直接写User_data.askFor_info.url属于从函数对象上找属性,必然触发属性不存在的报错。
  • 代码里存在拼写bug:askFor_info方法内写的是self.prodcut_name,和初始化方法里定义的self.product_name字母顺序错了,就算解决了属性访问问题,后续也会因为拼写不一致触发属性报错。
修复方案
  1. 先创建User_data类的实例对象,初始化时可以给url和product_name传空字符串当默认值,不需要提前传有效值
  2. 调用这个实例的askFor_info()方法,执行输入逻辑,方法会直接把用户输入的值赋值给当前实例的对应属性
  3. 从创建好的实例对象上读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:36:19