类属性是属于类的,而不是属于类的实例化对象。在Python中,可以通过以下几种方法来防止类属性被外部类修改:
示例:
class MyClass:
__my_attribute = 10
def get_attribute(self):
return self.__my_attribute
def set_attribute(self, value):
self.__my_attribute = value
obj = MyClass()
print(obj.get_attribute()) # 输出: 10
obj.set_attribute(20)
print(obj.get_attribute()) # 输出: 20
示例:
class MyClass:
_my_attribute = 10 # 前面加上单下划线表示属性是受保护的,不建议直接访问
@property
def my_attribute(self):
return self._my_attribute
@my_attribute.setter
def my_attribute(self, value):
# 在setter方法中可以添加条件判断,限制修改的规则
if value > 0:
self._my_attribute = value
obj = MyClass()
print(obj.my_attribute) # 输出: 10
obj.my_attribute = 20
print(obj.my_attribute) # 输出: 20
示例:
class MyDescriptor:
def __get__(self, instance, owner):
return instance._my_attribute
def __set__(self, instance, value):
if value > 0:
instance._my_attribute = value
class MyClass:
_my_attribute = MyDescriptor()
obj = MyClass()
print(obj._my_attribute) # 输出: None
obj._my_attribute = 10
print(obj._my_attribute) # 输出: 10
obj._my_attribute = -5
print(obj._my_attribute) # 输出: 10,因为值小于等于0,修改无效
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云