@property使用这个装饰器是将方法变成属性,对象可以获取私有属性值,.如果要设置一个私有属性值时使用的是@属性值.setter,那为什么获取属性值的时候不能用@property.getter呢?
还有下面一个问题:
class Test:
def init(self,name,age):
self.__name=name
self.__age=age
@property
def name(self):
return self.__name
@name.setter
def test(self,name): 为什么这里不是name属性名,也可以
if type(name) is str and len(name)<12:
self.__name=name
else:
print('输入错误')
test1=Test('jimi',12)
test1.test='joh2222222222222222222n' 这里可以改值是为啥呢?
print(test1.name)
@name.setter 告诉编译器下面这个函数是name的setter
函数啥名字无所谓,
当然为了让别人或者半年以后的自己看得懂,最好函数也叫name
python语法中没有@property.getter这个东东啊。@property就是“get”,它标在“name”方法上 就是说name方法已经作为一个属性让对象来访问,尽管它类内部还是方法调用。
@name.setter标在哪个方法都可以,但这个“@name”的name必须和某个@property修饰的“name”相同,也就是配对。
class Car:
def __init__(self, brand):
self.__brand = brand
self.__age = 90
# 使用@property注解,定义get方法
@property
def brand000(self):
return self.__brand
# 使用@xxx.setter注解,定义set方法。必须和某个get方法配对
@brand000.setter # 这个 xxx 是已经存在的某个get方法名
def brand000(self, brand): # 这个方法名 brand000 通常和get方法名相同。也可以不同
self.__age = brand # set 和 get是否操作同一个属性,无强制性
@property # get方法可以没有set方法配对
def age(self):
return self.__age
def getAge(self):
return self.__age
car = Car("大-众")
print(car.brand000) # 大-众
car.brand000 = 12
print(car.getAge()) # 12
print(car.age) # 12
def test(self,name): 这里name是函数内的参数名,也就是局部变量,不是对象的属性名