在使用私有變量的時候:
class Stu(object):
def __init__(self, name):
self.__name = name
stu = Stu('xiaoming')
print(stu.__name)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-29-7ac3b468dec8> in <module>()
4
5 stu = Stu('xiaoming')
----> 6 print(stu.__name)
AttributeError: 'Stu' object has no attribute '__name'
那么怎么用呢?
最簡單的是設(shè)置對應(yīng)的函數(shù)來存取值:
class Stu(object):
def __init__(self, name):
self.__name = name
def setName(self, name):
self.__name = name
def getName(self):
return self.__name
stu = Stu('xiaoming')
print(stu.getName())
---------------------------------------------------------------------------
xiaoming
但這樣可以說是相當麻煩了,使用property就可以簡潔很多:
class Stu(object):
def __init__(self, name):
self.__name = name
def setName(self, name):
self.__name = name
def getName(self):
return self.__name
name = property(getName, setName)
stu = Stu('xiaoming')
stu.name='老王'
print(stu.name)
---------------------------------------------------------------------------
老王
再進化一次:
class Stu(object):
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
stu = Stu('xiaoming')
stu.name='老張'
print(stu.name)
@property注釋原get方法分蓖,函數(shù)名變?yōu)閷傩悦?br> @屬性名.setter注釋原set方法植袍,函數(shù)名變?yōu)閷傩悦?br> 函數(shù)內(nèi)可以在賦值取值時執(zhí)行操作
使用的時候直接使用屬性名賦值取值
完