代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
name = "whole global name"
class Person:
name = "class global name"
def __init__(self, newPersionName):
#self.name = newPersionName;
#此处,没有使用self.name
#而使得此处的name,实际上仍是局部变量name
#虽然此处赋值了,但是后面没有被利用到,属于被浪费了的局部变量name
name = newPersionName
def sayYourName(self):
#此处,之所以没有像之前一样出现:
#AttributeError: Person instance has no attribute 'name'
#那是因为,虽然当前的实例self中,没有在__init__中初始化对应的name变量,实例self中没有对应的name变量
#但是由于实例所对应的类Person,有对应的name变量,所以也是可以正常执行代码的
#对应的,此处的self.name,实际上是Person.name
print('My name is %s'%(self.name)) # -> class global name
print('name within class Person is actually the global name: %s'%(name)) #-> whole global name
print("only access Person's name via Person.name=%s"%(Person.name)) # -> class global name
def selfAndInitDemo():
persionInstance = Person("crifan")
persionInstance.sayYourName()
print("whole global name is %s"%(name)) # -> whole global name
###############################################################################
if __name__=="__main__":
selfAndInitDemo()
输出:
My name is class global name
name within class Person is actually the global name: whole global name
only access Person's name via Person.name=class global name
whole global name is whole global name