添加方法
- 很简单,直接在子类中声明新的方法就行了,但是父类用不了,只能在子类或者子类的子类中使用
重写方法
在子类中重新实现父类的方法
- 完全重写
子类先在当前类找方法,若有则调用,若没有则在父类中找,一直找到object基类 - 部分重写
用super().eat(food), super为父类,后面执行的父类中的方法,先调用父类的方法,再实现剩下的方法,super后的括号一定不能少
类中函数的调用过程
回到函数声明的位置:先看当前类中是否有方法,如果有就直接调用,如果没有就去看父类中有没有这个方法。一直向上找到object,如果还是没有,则崩溃报错
添加属性(类的字段与对象属性)
- 类的字段
直接在子类中声明新的字段 - 添加对象属性:
对象的属性其实是通过继承init方法继承下来的
在子类的init方法要用super().init(),来继承父类的属性,不加的话会重新覆盖掉父类中的方法
class Ql_Person(object): #
"""
类说明文档:
"""
num = 61
def __init__(self, name = '', age = 0, sex = '男'):
"""
函数说明文档:
"""
self.name = name
self.age = age
self.__sex = sex
def ql_Eat(self, food): #
"""
函数说明文档:
"""
print('%s在吃%s' % (self.name, food))
@classmethod
def ql_Show_Num(cls): #
"""
函数说明文档:
"""
print('人类数量%s' % cls.num)
class Ql_Stu(Ql_Person): #
"""
类说明文档:
"""
num = 30
num2 = 100
def ql_Stu_Study(self): #
"""
函数说明文档:
"""
print('%s在写代码' % self.name)
@classmethod
def ql_Show_Num(cls):
print('学生数量: %d' % cls.num)
def ql_Eat(self): #
"""
函数说明文档: 重点!!!
"""
super().ql_Eat('栗子') # 调用父类中的函数
print('吃饱了')
def main():
p1 = Ql_Person('张三')
stu1 = Ql_Stu('李四')
stu1.ql_Stu_Study()
stu1.ql_Eat()
print(p1._Ql_Person__sex)
p1.ql_Show_Num()
stu1.ql_Show_Num()
print(stu1.num2)
class Ql_Animals: #
"""
类说明文档:
"""
def __init__(self, age):
"""
函数说明文档:
"""
self.age = age
self.type = '爬行'
self.color = '灰色'
class Ql_Dog(Ql_Animals): #
"""
类说明文档:
"""
def __init__(self, age):
self.name = '啊狗'
super().__init__(age)
def main():
dog1 = Ql_Dog(20)
print(dog1.type, dog1.color)
dog2 = Ql_Dog(30)
print(dog2.name)
#练习:
#声明人类的属性:名字,年龄,性别
#声明学生类有属性:名字,年龄,性别,学号,分数
#要求:创建人的对象的时候,名字必须赋值,性别可以赋值也可以不赋值,年龄不能赋值,
# 创建学生对象的时候,名字可以赋值可以不赋值,学号必须赋值,分数和性别年龄不能赋值
class Ql_Person: #
"""
类说明文档:
"""
def __init__(self, name, sex = None ):
"""
函数说明文档:
"""
self.name = name
self.sex = sex
self.age = None
class Ql_Stu(Ql_Person): #
"""
类说明文档:
"""
def __init__(self, num, name = ''):
"""
函数说明文档:
"""
super().__init__(name)
self.num = num
self.score = None
def main1():
stu1 = Ql_Stu(1)
print(stu1.__dict__)
网友评论