python -property装饰器,get和set

@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是函数内的参数名,也就是局部变量,不是对象的属性名