贴上示例代码
1 class Foo(object): 2 def __init__(self, sex): 3 self.sex = sex 4 5 def Fun(self): 6 print(hasattr(foo, 'sex')) 7 return self.sex 8 9 10 foo = Foo('man') 11 print(foo.Fun())
1.创建了Foo类之后,首先会运行到 :__init__这个方法
进入之后python会判断,Foo类进行实例化之前需要先准备什么(上面代码示例看到是准备要实例化一个性别sex属性)
因为没有实例化,因此便不会运行 self.sex = sex 去和Foo类进行属性绑定,继续走下一步的代码,发现了还需要准备方法 def Fun(self):
2.当知道有哪些方法后,也就是所有准备工作都完成后
python会跳出Foo类,然后一步一步往下走,直到找到对它进行实例化的代码:foo = Foo('man')
这个时候会进入 __init__中,将准备好的sex属性和 man 值匹配对应
最后 self.sex = sex 这步将会把 sex = ‘man’ 和Foo类进行绑定,从而Foo类便正式有了sex这个对象
3.实例化完成后,Foo并不会走接下来Fun方法,而是会跳出该类,走 print(foo.Fun()) 代码
这里就能显示我们自定义的类方法和python函数基本是同一个概念(唯一的区别就是方法有self,可以拥有和类相关的功能),都是需要调用才会进入
调用Fun方法后,会读取方法代码,hasattr(foo, 'sex') 判断foo有没有 'sex' 对应的对象,有返回True,否则返回False
最后因为1,2步已经绑定好了,因此 return self.sex 的值为man