Python笔记_第三篇_面向对象_9.Python中的"get"和"set"方法(@property和@.setter)

1. 限制访问的问题

  如果学过C# 语言的我们可以知道C# 语言有get和set方法。我们之前想要获取父类中的私有变量,只能通过写一个set和get的函数进行访问或者通过类生成的新关键字来访问私有属性(_类名__私有变量)。其实Python也给我们提供了一种get和set的方法。其内容就是一种装饰器的作用,采取@property和@变量名.setter的方式。

  举例说明1:

# 属性直接对外暴露
# 不安全,没有熟虑过滤
# 使用限制访问的话,需要些set和get方法。
from types import MethodType

class Person(object):
    def __init__(self,age):
        # 属性直接对外暴露,改为限制访问的方式
        self.__age = age
    # 方法名为受限制的变量去掉双下划线的方式访问
    @property      # 其实也是一种装饰器 这个就是get方法的意思
    def age(self):
        return self.__age
    @age.setter    # 去掉下划线.setter 这个就是set方法的意思
    def age(self,age):
        if age < 0:
            age = 0
        else:
            self.__age = age

per = Person(18)
per.age = 100
print(per.age)
# 100

# Property:可以让你对受限访问的属性使用点语法。

  其实这种方法说白了,就是把get和set的自定义函数变换成点访问的形式