Python学习:属性访问

一、通常以属性(.)访问

class C:
    def __init__(self):
        self.x = 'X-man'

在这里插入图片描述

二、通过property()函数访问

class Test:
        def __init__(self, size=10):
            self.size = size
        def getSize(self):
            return self.size
        def setSize(self,value):
            self.size = value
        def delSize(self):
            del self.size
        x = property(getSize,setSize,delSize) 

在这里插入图片描述

三、属性相关的魔法方法

魔法方法含义
__getattr__(self, item)定义当用户试图访问获取一个不存在的属性时的行为
__getattribute__(self, item)定义当该类的属性被访问时的行为
__setattr__(self, key, value)定义当一个属性被设置时的行为
__delattr__(self, item)定义当一个属性被删除时的行为

示例1:

class D:
    def __getattribute__(self, name):
        print('getattribute')
        # 使用super()调用object基类的__getattribute__()方法
        return super().__getattribute__(name)

    def __setattr__(self, name, value):
        print('setattr')
        super().__setattr__(name, value)

    def __delattr__(self, name):
        print('delattr')
        super().__delattr__(name)

    def __getattr__(self, name):
        print('getattr')

在这里插入图片描述
示例2:

class Rectangle:
    def __init__(self, width=0, height=0):
        self.width = width
        self.height = height
    # __setattr__()定义一个属性被设置时的行为
    def __setattr__(self, key, value):
        if key == 'square':
            self.width = value
            self.height = value
        else:
       		# self.name = value
          # 当给self.width和self.height赋值时,触发__setattr__()魔法方法
          # 于是执行else下面的语句,如果此处写self.name = value
          #就又变成self.width = value,相当于反复触发__setattr__()方法形成死循环
            super().__setattr__(key,value)
            #等价于self.__dict__[name] = value

    def getArea(self):
        return self.width * self.height

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值