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__: 实例对应的类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值