class Test():
def __init__(self):
pass
def say(self):
print("my name is " + self.name)
def setName(self,name):
print("调用了set函数")
self._name = name
def getName(self):
print("调用的get函数")
return self._name
def delName(self):
print("调用的del函数")
del self._name
name = property(getName,setName,delName,"这是一个测试文本") #类变量才能生效
test = Test()
test.name = "novjam" #调用了set函数,实例变量的赋值并不会影响类变量的值
print(Test.name.__doc__) #打印出"这是一个测试文本",test.name.__doc__无法取到"这是一个测试文本"
print("*" * 20)
print(Test.name)
print(type(Test.name))
'''
个人理解:
有个巨坑:_name换成name会进入递归调用!
实例变量会先匹配是否有同名的类变量,如果有,则会根据类变量的值对实例进行相应的操作。
类变量Test.name是<class 'property'>,对其重新赋值可能会导致get,set,del,doc方法失效,原因上述。
'''