展开全部
首先,你对编程的基础知识比较欠缺,导致e69da5e887aa62616964757a686964616f31333433623133你对一些名词的理解有一些错误,这让你的学习变得困难,你应当先去学习对编程中常用的术语以避免对相关教程的理解偏差(廖雪峰的网站中内容比较基础,但也不会对这些基础名词做解释的,因为解释这些需要太大的篇幅,而其中的知识量又很少)。我先给你简单解释两组可能被你混淆的名词:
变量与属性
变量独立存在的,而属性是依对象存在的。
name = 'jack',这个name就是一个变量;
a.name = 'jack',这个name就是一个属性。
变量只在作用域范围内存在,在过程中定义的变量,在过程外就无法访问了,在模块内定义的变量,出了模块就无法访问了。
无特殊情况时,属性在对象可用时就可用(暂不考虑其它语言)。
形参与实参
在一个函数、过程、方法的定义过程中指定的参数,均为形式参数,简称形参,;在调用这个函数、过程、方法时传递的参数,是实际参数,即实参。
def myfn(p1, p2): #p1与p2即形参名
pass
print(myfn(1,10)) # 1与10即实参值
形参是在代码中定义的,实参是在调用时传递的。在函数内部,通过形参名来使用实参值,形参作的作用域与变量一样,即,只在过程内有效。
形参与实参的概念有助于描述或理解”已经定义的参数在调用时没有传值“时的一些问题(比如”形参a无对应实参“)。在形参有传值时,我们更常用的方式是简单的用”参数“称呼它。
然后我来回答你的疑问。
第一个问题,在__init__中通过赋值方式定义了一些属性,那么,除非删除了这些属性,否则,类中其它代码是可以直接使用的。在类实例化为对象时,首先调用了__init__,这些属性就存在了,之后才会调用其它方法,访问这些属性是没问题的。
第二个问题,在update_screen有三个参数,但它调用Ship类的实例ship的blitme时,是没有传递参数的。update_screen定义了多少参数与Ship.blitme定义了多少参数是没有关系的。
第三个问题,ai_settings是形参,在update_screen中的代码执行时,它有了对应的值(实参),因此在update_screen中的代码中可以通过形参ai_settings来使用相应的实参。