Python面向对象进阶

本文深入探讨Python的面向对象编程,包括对象属性的增删改查、内置属性的使用、运算符重载、继承机制及其细节问题,以及拷贝和内存管理。详细介绍了getattr、setattr、delattr等方法,以及__doc__、__name__等内置属性。同时,文章还讨论了浅拷贝和深拷贝的区别,并阐述了Python内存管理的基本原理。
摘要由CSDN通过智能技术生成

Python面向对象进阶

1.对象属性的增删改查

1.1 查 - 获取属性值

1.1.1 对象.属性 - 获取对象指定属性的值
1.1.2 getattr(对象,属性) - 获取对象指定属性的值,如果属性不存在则报错
1.1.3 getattr(对象,属性, 默认值) - 获取对象指定属性的值,若属性不存在,则返回默认值

class Student:
    # __slots__ = ('name','age','study_id')

    def __init__(self, name, age=18, study_id='000'):
        self.name = name
        self.age = age
        self.study_id = study_id

    # 在当前类的对象被打印的时候自动调用,并且将这个方法的返回值作为打印结果(返回值必须是字符串)
    def __repr__(self):
        return f'<{
     str(self.__dict__)[1:-1]}>'


stu1 = Student('小明')
stu2 = Student('小花', 20, '0001')
print(stu1.name)
print(getattr(stu1, 'name'))

value=input('请输入需要获取的属性')
print(getattr(stu1,value))

print(getattr(stu1, 'gender', '男'))
1.2 增、改

1.2.1 对象.属性 = 值 - 当属性存在的时候修改属性的值,当属性不存在时添加属性
1.2.2 setattr(对象,属性,值) - 添加属性

stu1.name = '张三'
print(stu1.__dict__)
print(stu1)

stu1.gender = '女'
print(stu1)
print(stu1.gender)

setattr(stu1, 'score', 100)
print(stu1)
print(stu1.score)
1.3 删

1.3.1 del 对象.属性 - 删除指定对象的指定属性
1.3.2 delattr(对象,属性名) - 删除指定对象的指定属性

del stu1.age
print(stu1)

delattr(stu1, 'study_id')
print(stu1)


class A:
    # __slots__属性的值就是当前类的对象最多能够拥有的对象属性,如果为空,那么这个类的对象就不能有对象属性
    # 注意:如果给类设置了__slots__,那么这个类的对象就不能再使用__dict__属性
    __slots__ = ('x', 'y', 'z')

    def __init__(self):
        self.x = 10

a = A()
a.y = 100
a.z = 200
# a.m=300  # 报错

2.内置属性

class A:
“”“测试类A”""
pass

2.1 __doc__ - 类的说明文档

print(A.__doc__)
print(int.__doc__)
print(int(10).bit_length())
print(dict.__doc__)

2.2 _module_ - 获取类所在的模块(类属性&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值