Python类定制属性访问(增,删,改,查)

183 阅读2分钟

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

定制属性访问 (增,删,改,查)

就是对类里的属性进行增删改查的操作
(1)增
setattr(实例名,"属性名",值) 或者 实例名.属性 = 值

(2)删
delattr(实例名,"属性名") #只能删除自己家的属性

(3)改
setattr(实例名,"属性名","新属性") #有这个属性才可以修改

(4)查
hasattr(实例名,"属性名") #返回布尔值,有就True,没有就False
或者
getattr(实例名,"属性名") #存在就能取到这个值,不存在就报错

可以用成 实例名.getattr("属性名") 上面的几个也可以(因为在python里面已经定义好了,已经有源码),但是hasattr不可以,没有这个方法。
但是用这种方法时,要在类里面定义这种方法。(重写方法)
例如:

  def __getattribute__(self,item):
        return "属性不在"
                

把这个写在类里面作为一个方法。
重写一个源码,python会返回你重写的这个方法的返回值,而不会再执行源码。

举例说明:

class Rectangle:
    #__init__不能使用return
    def __init__(self,length,width):
        self.length = length
        self.width = width

    def area(self):
        #使用self 那个实例去使用它,它就是谁
        return(self.length*self.width)

a = Rectangle(4,5)

################查

#判断实例有没有这个属性
print(hasattr(a,'length')) #输出aTrue
#实例的这个属性值是什么 获取值,没有就报错
print(getattr(a,'length')) #输出4

################改

setattr(a,'width',50) #本来应该是5,现在改成了50
#还可以写成: a.setattr('width', 50)
print(getattr(a,'width')) #输出就是50

################增

#第一种:

#setattr 有则改,无则增
print(hasattr(a,'name')) #在这里实例a里面没有属性name。输出False
setattr(a,'name','hansha') #没有就增加属性name
#还可以写成:a.setattr('name', 'hansha')
print(hasattr(a,'name')) #上一句增加了name属性。输出True
#第二种:
a.age = 18

################删

print(getattr(a,'age')) #因为上面增加了属性age。输出为True
delattr(a,'age') #删除属性age
#还可以写成:a.delattr('age')
print(getattr(a,'age')) #上面删除了属性age。输出为False

拓展:

(1) + 调用的是__add__

class A:
        def __init__(self,num1,num2):
                self.num1 = num1
                self.num2 = num2

        def __add__(self,other):      #self  实例对象   ;   other  另外一个实例对象
                sum1 = self.num1 + other.num1
                sum2 = self.num2 + other.num2
                return sum1,sum2


a = A(1,2)
b = A(3,4)
print(a+b)    #输出为  (4,6)

运算符方法(了解即可)

add(self,other) # x+y
sub(self,other) # x-y
mul(self,other) # xy
mod(self,other) # x%y
iadd(self,other) # x+=y
isub(self,other) # x-=y
radd(self,other) # y+x
rsub(self,other) # y-x
imul(self,other) # x
=y
imod(self,other) # x%=y

每天坚持学习,坚持记笔记——好记性不如烂笔头。

加油加油!