Python基础---Task11: 类的魔法方法

Python基础---Task11: 类的魔法方法

继承

  • 子类可直接继承父类所有非私有属性和方法

继承属性

class Course(object): 
    
#    __slot__ = ['name','how_long', 'teacher', 'level', 
#                 'address']
##-------__slot__减少类的内存, 不能再添加[]之外的其他属性------
    
    
    def __init__(self, name, how_long, teacher, level):
        # 创建模板类,定义实例属性:初始化时传入参数一个不能少
        #把传入对应参数绑定为对应属性
        self.name = name # 传入的name绑定到属性self.name
        self.duration = how_long
        self.teacher = teacher
        self.__level = level  
        #__表示内部属性,只能从外部定义不能从外访问


class Special_course(Course):
    # 子类继承所有父类非私有
    def __init__(self,content):
        super().__init__() 
        # 继承父类的私有属性
        self.content = content 
        # 在父类基础上添加属性

python_base = Special_course('coding')
>> TypeError: __init__() missing 5 required positional arguments: 
'name', 'how_long', 'teacher', 'level', and 'address'
# 还需传入父类__init__中规定的传入参数

重新设置属性

class Special_course(Course):
    # 子类继承所有父类非私有
    def __init__(self,content):
        self.content = content # 在父类基础上添加属性
        
    def __getattr__(self, name):
        # 获取新属性写入信息
        return getattr(self._speCourse, name)
    
    def __setattr__(self, name, value):
        # 设置新属性
        if name.startswith('_'):
        # 如果某个属性名以下划线(_)开头,就通过 super() 调用原始的 __setattr__()
            super().__setattr__(name, value)
        else:
            setattr(self._speCourse, name, value)

参考文献:
python3- cookbook
https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html

16 days

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值