继承
- 子类可直接继承父类所有非私有属性和方法
继承属性
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