Python中self参数与实例创建的深层疑问解析
Python中self关键字与类实例化的常见问题解答
1. 为什么main方法加self后报错?
Python里类中的方法分三种:实例方法、类方法、静态方法。
- 如果你的
main方法没加self,直接用FoodItems.main()能正常调用,说明它本质是个普通函数(不属于实例方法),调用时不需要绑定实例。 - 当你给
main加上self后,Python会默认把它当成实例方法——实例方法的第一个参数必须是当前实例(约定用self命名),调用时会自动把实例传给这个参数。如果这时候你还是用FoodItems.main()(通过类直接调用),Python找不到要传的实例,就会报missing 1 required positional argument: 'self'。
正确的调用方式是先创建类的实例,再通过实例调用:
class FoodItems: def main(self): print("运行main方法") # 先实例化(注意要满足__init__的参数要求) item = FoodItems(参数1, 参数2, ..., 参数8) # 通过实例调用main,Python自动把item传给self item.main()
2. item1 = FoodItems 和 item1 = FoodItems() 的区别
item1 = FoodItems:把类本身赋值给变量item1,此时item1就是FoodItems这个类对象(类型是type),你可以用它做类能做的事,比如创建实例、访问类属性等。item1 = FoodItems():调用类的构造方法__init__,创建一个类的实例对象,赋值给item1,此时item1是类的具体实例,拥有实例属性和方法。
举个直观的例子:
item1 = FoodItems print(type(item1)) # 输出:<class 'type'>(类对象) item2 = FoodItems(参数1,...) print(type(item2)) # 输出:<class '__main__.FoodItems'>(实例对象)
3. 调用FoodItems()提示缺少8个必需参数的原因
这说明你的FoodItems类的构造方法__init__,除了默认的self参数外,还定义了8个必需的位置参数。比如你的类定义大概是这样:
class FoodItems: def __init__(self, p1, p2, p3, p4, p5, p6, p7, p8): self.p1 = p1 # 剩下7个参数的赋值逻辑
Python要求创建实例时,必须传入__init__中除self外的所有必需参数,所以你需要这样调用:
item1 = FoodItems(值1, 值2, 值3, 值4, 值5, 值6, 值7, 值8)
内容的提问来源于stack exchange,提问作者user3768679
相关产品推荐
相关产品推荐

