Python基础(二十三): 只读属性

只读属性: 只能读取数据, 而不能修改数据的属性(一般指实例属性)

一、经典类和新式类

  • 经典类: 没有继承自object的类, 2.0中, 没有父类的类就是经典类
  • 新式类: 继承自object的类, 3.0中所有创建的类自动继承自object

在2.0中想要创建新式类, 必须继承自object

二、property的使用方式

  • 文档:

1、方式一

  • 定义类新式类Person, 将age属性和两个方法关联起来:
# 2.0 中需要写上继承自object, 3.0中不用写
class Person(object):
    def __init__(self):
        self.__age = 18
        
    def get_age(self):
        return self.__age
    
    def set_age(self, value):
        self.__age = value
    
    age = property(get_age, set_age)
复制代码
  • 调用
p = Person()
print(p.age)                        # 打印: 18

p.age = 20
print(p.age)                        # 打印: 20

print(p.__dict__)                   # 打印: {'_Person__age': 20}
复制代码

2、方式二

  • 定义类新式类Person, 将age属性和两个方法关联起来:
# 3.0中不需要写 继承自object
class Person:
    def __init__(self):
        self.__age = 18
    
    @property
    def age(self):
        return self.__age
    
    @age.setter
    def age(self, value):
        self.__age = value
复制代码
  • 调用
p = Person()
print(p.age)                        # 打印: 18

p.age = 20
print(p.age)                        # 打印: 20

print(p.__dict__)                   # 打印: {'_Person__age': 20}
复制代码

三、使用property设置只读属性

1、方式一

  • 定义类新式类Person, 将age属性和get方法关联起来:
# 2.0 中需要写上继承自object, 3.0中不用写
class Person(object):
    def __init__(self):
        self.__age = 18
        
    def get_age(self):
        return self.__age
    
    age = property(get_age)
复制代码

2、方式二

  • 定义类新式类Person, 将age属性和两个方法关联起来:
# 3.0中不需要写 继承自object
class Person:
    def __init__(self):
        self.__age = 18
    
    @property
    def age(self):
        return self.__age
复制代码

四、使用__setattr__方法, 设置只读属性

  • 当一个对象, 调用对象.属性 = 值时, 就会调用它的__setattr__方法
class Person:

    def __setattr__(self, key, value):
        if key == 'age' and key in self.__dict__.keys():
            pass
        else:
            self.__dict__[key] = value
复制代码

五、内置特殊属性

在类和对象中, 存在一些系统定义的属性

1、类属性

  • __dict__: 查看类的属性
  • __bases__: 类的所有父类构成元组
  • __doc__: 类的文档字符串
  • __name__: 类名
  • __module__: 类定义所在的模块

2、实例属性

  • __dict__: 实例的属性
  • __class__: 实例对应的类
    原文作者:weixin_34184561
    原文地址: https://blog.csdn.net/weixin_34184561/article/details/88038648
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞