@property

什么

property RW limit

这里如果想设置合理区分读、写权限的话,定义class时需要继承object类,不然读写权限无法限制

只读

class Person(object):
    human = True

    def __init__(self, name, gender):
        self.Name = name
        self.__Gender = gender
        self.__Money = 100

    @staticmethod
    def Hello():
        print('Hello World!')

    def info(self):
        print('Name: {} \nGender: {}'.format(self.Name, self.__Gender))

    def __set_money(self, num):
        self.__Money += num

    def salary(self):
        self.__set_money(1000)
        print('Name: {} \nGerder: {} \nCurrent Money: {}'.format(self.Name, self.__Gender, self.__Money))

    @property
    def money(self):
        return self.__Money


Da = Person('Da', 'male')
print(Da.money)

输出

100

尝试写入看下

class Person(object):
    human = True

    def __init__(self, name, gender):
        self.Name = name
        self.__Gender = gender
        self.__Money = 100

    @staticmethod
    def Hello():
        print('Hello World!')

    def info(self):
        print('Name: {} \nGender: {}'.format(self.Name, self.__Gender))

    def __set_money(self, num):
        self.__Money += num

    def salary(self):
        self.__set_money(1000)
        print('Name: {} \nGerder: {} \nCurrent Money: {}'.format(self.Name, self.__Gender, self.__Money))

    # 只读
    @property
    def money(self):
        return self.__Money



Da = Person('Da', 'male')
print('Before setter money is {}.'.format(Da.money))
Da.money = 5000
print('After setter money is {}.'.format(Da.money))

输出

Before setter money is 100.
Traceback (most recent call last):
  File "F:/Python/Learn Through/oop1.py", line 48, in <module>
    Da.money = 5000
AttributeError: can't set attribute

可写特性

class Person(object):
    human = True

    def __init__(self, name, gender):
        self.Name = name
        self.__Gender = gender
        self.__Money = 100

    @staticmethod
    def Hello():
        print('Hello World!')

    def info(self):
        print('Name: {} \nGender: {}'.format(self.Name, self.__Gender))

    def __set_money(self, num):
        self.__Money += num

    def salary(self):
        self.__set_money(1000)
        print('Name: {} \nGerder: {} \nCurrent Money: {}'.format(self.Name, self.__Gender, self.__Money))

    # 只读
    @property
    def money(self):
        return self.__Money

    # 可写
    @money.setter
    def money(self, value):
        self.__Money = value


Da = Person('Da', 'male')
print('Before setter money is {}.'.format(Da.money))
Da.money = 5000
print('After setter money is {}.'.format(Da.money))

输出

Before setter money is 100.
After setter money is 5000.

results matching ""

    No results matching ""