python面向对象 - 20 属性的 增 删 改 查 与私有化

1. 属性的修改、删除和添加

例如:创建人类

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age

a. 使用对象的属性

p1 = Person('XiaoMing', 20)
print(p1.name)   #>>>XiaoMing

b. 修改对象的属性

p1.name = 'HanBo'   
print(p1.name)   #>>>HanBo

c. 添加对象的属性

p1.face = 100    #如果对象属性不存在,给对象属性赋值,就是给对象添加属性
print(p1.face)   #>>>100

d. 删除对象的属性

del p1.age
# print(p1.age)   #删除也是只删除当前这个对象的属性,不会影响类和其他的对象

p2 = Person('ZhangSan',28)
print(p2.age)   #>>>28  这里的age在对象p1中被删除,而在p2中依然存在,说明删除不会影响类和其他的对象

# 注意:给对象添加属性是添加到对象中的,而不是类中
# print(p2.face)  #>>>报错 face属性值添加到p1中,而p2去调用就会报错,因为不是添加到类中

2.通过attr方法对属性进行增、删、改、查

例如:创建狗类

class Dog():
    def __init__(self, name, color):
        self.name = name
        self.color = color

    def shout(self):
        print('%s一见到小偷就汪汪汪的叫~' % self.name)
        
dog1 = Dog('caicai', 'yellow')

a. 获取对象的属性: getattr

print(getattr(dog1,'name'))   #>>>caicai
print(dog1.name)              #>>>caicai

b. 给某个对象的某个属性赋值: setattr

setattr(dog1, 'name', 'wangcai') #如果属性有就给改变属性的值
setattr(dog1, 'age', 3) #如果属性没有,就给对象添加属性并赋值
print(dog1.name)   #>>>wangcai
print(dog1.age)    #>>>3

c. 判断某个对象是否有某个属性: hasattr

print(hasattr(dog1, 'age'))    #>>>True    #没有返回False
print(hasattr(dog1, 'color'))  #>>>True

d. 删除某个对象的某个属性: delattr

delattr(dog1, 'name')
# print(dog1.name)   'Dog' object has no attribute 'name'

总结:声明一个类,有多个对象属性, 通过方法去访问、修改、添加、删除对象的属性。判断某个属性是否存在

3.对属性假的私有化:

定义: 不希望别人随便访问和修改的属性,就在属性名前加一个'_',提示别人不要在外部直接访问。如果绝对私有进制外部访问就在属性前面加两个下划线. 这样的属性一般会提供对应的访问和修改的方法

例如: 创建一个学生类

def main():

    class Student():

        def __init__(self, name, age, score):
            self.name = name
            self._age = age
            self.score = score

        def set_age(self, age):
            #可以在这儿对赋的值进行一系列的判断和操作
            try:
                age = int(age)
                if age < 0
                    age = 0
                if age > 150
                    age = 150
            except:
                age = 0
            self._age = age


        def get_age(self):
            return self._age

    stu1 = Student('XianMing', 20, 99)
    stu1.set_age(22)  #通过set方法去给对应的私有属性赋值
    print(stu1.get_age())  #通过get方法去拿到私有属性的值

if __name__ == '__main__':
    main()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值