关于self的问题
传不了图片,我想请问一下这个输出不应该是 name创建 的吗,name在函数的外部
代码:
class Ball:
name = "name创建的"
def setname(self,name):
self.name = name
def kick(self,name):
self.name = name
a = Ball()
a.setname("setname创建的")
a.kick("kick创建的")
print(a.name)
输出:
kick创建的 name 是类属性,被实例属性覆盖了 a.kick("kick创建的")
这个不是直接调用了kick的方法么,也传了参数,那不就直接打印出来么
不是把class这段代码从头到尾运行一遍
self就是代表class自身 你的程序中有多个name,分别表示不同的含义
给你写了注释
class Ball:
name = "name创建的"#这个是类属性,调用的时候需要写类名:Ball.name
def setname(self,name):#这个是形参,是个局部变量,只在这个函数中起作用
self.name = name#前者是实例属性,实例化该类之后,用实例化名调用,例如第10行的a.name。 后者是局部变量,就是上一行的那个形参,是调用该函数的时候传进来的参数
def kick(self,name):#这个也是形参,是个局部变量,只在这个函数中起作用
self.name = name#这里和第四行一样
a = Ball()
a.setname("setname创建的")#括号内的字符串是实参,被传进函数,即第三行的name,然后在第四行用来修改实例化属性self.name
a.kick("kick创建的")#括号内的字符串是实参,被传进函数,即第五行的name,然后在第六行用来修改实例化属性self.name
print(a.name)#这个是实例化属性,即self.name,在上两行被修改了两次,所以这里输出的是最后一次修改后的值 查找属性有优先级的:
(我自己总结的优先级从高到低 有错误可以指出{:5_102:}按继承顺序就是super的顺序
按继承顺序中各个类的__getattribute__方法
本类的数据描述符属性
本实例属性(obj.__dict__)
本类的非数据描述符属性
按继承顺序各个类的属性和描述符属性(super().__dict__)
按继承顺序各个类的__getattr__方法
还找不到就抛出AttributeError异常
页:
[1]