问题1:如何让子类不完全重写父类中的方法,即保留了父类中的方法,又对父类中的方法做了补充?
答:执行完父类中的方法,在继续执行子类中的方法!相当于在父类的基础上,添加功能!!
简单点来说只需要在子类重写的方法中调用一下父类中的方法并且在括号中传入self即可!!
多说无益:下面直接上代码!!
class Animal:
bu_animal='食肉动物'
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def eat(self):
print('%s正在吃饭!!'%self.name)
#类名后面加括号表示继承!
'''
当子类继承父类的时候,子类Person便可以使用父类Animal中所有的方法和属性!!!
不需要在重新去定义!!
'''
class Person(Animal):
bu_animal = '杂食动物'
def talk(self):
print('%s正在讲话!!'%self.name)
'''
简单的重写(重构父类中的方法):
直接在子类当中定义一个和父类相同的方法时,就会重写父类当中的方法
重写(重构父类中的类属性):
同样的,直接在子类当中定义一个和父类相同的类属性时,就会重写父类当中的方法
'''
def eat(self):
#Animal.eat(self)的self是把子类中的self传进去,对其进行绑定!!
Animal.eat(self)
print('%s在优雅的进行吃饭'%self.name)
我将主要代码挑出来!!
def eat(self):
#Animal.eat(self)的self是把子类中的self传进去,对其进行绑定!!
Animal.eat(self)
print('%s在优雅的进行吃饭'%self.name)
可以看到,子类对父类的eat方法进行重写时,调用了父类中的eat方法并将子类的self传进父类的eat方法当中,完成了绑定!这样子类对于父类的重写,即完成了之前的内容,又对父类的方法进行了一定的补充!!
问题2:如何完全重写父类的构造方法?
答:直接在子类中再写一次构造方法即可
class Person(Animal):
def __init__(self,name):
self.name=name
问题3:如何对父类中的构造方法进行补充?
答:同样的在子类构造方法上面调用父类构造方法即可,Animal.__init__(self,name,age,sex)这里的self的传递流程是,键盘输入到子类当中 子类在传入子类的构造方法,在传入父类当中进行绑定!!
注:无论子类怎么对父类的构造方法进行补充:都是先执行父类的构造方法之后,才能够执行子类的构造方法!!
python2左右都是用这种方法去重写父类的方法
class Person(Animal):
def __init__(self,name,age,sex,hobbies):
Animal.__init__(self,name,age,sex)
self.hobbies=hobbies
目前python3都是用super()来重写方法
class Person(Animal):
def __init__(self,name,age,sex,hobbies):
#Animal.__init__(self,name,age,sex)
#和上面代码效果是一样的
super(Person,self).__init__(name,age,sex)
self.hobbies=hobbies
再简单点来说就是:二者效果相同
Animal.__init__(self,name,age,sex) 等价于 super(Person,self).__init__(name,age,sex)
But现在用的最多的一种方法是:super().__init__(name,age,sex)
class Person(Animal):
def __init__(self,name,age,sex,hobbies):
#Animal.__init__(self,name,age,sex)
#和上面代码效果是一样的
#super(Person,self).__init__(name,age,sex)
super().__init__(name,age,sex)
self.hobbies=hobbies
以上就是重构父类的构造函数,并且子类对父类的构造函数添加一些新的功能!!
对于类中的函数也是一样:用super().eat()既可以执行父类的方法,又可以重新添加新的方法!!
1 、什么是类?
def Dog(name,d_type):{
}
该部分其实就是一个类,类中定义了这些对象的都具备的属性、共同的方法
2、什么是对象?
说简单一点,对象就是实实在在的东西!!---实体
d3=Dog('tiger','泰迪')
d4=Dog('贝贝','柯基')
d3,d4相当于现实世界当中实实在在存在的实体,即就叫做对象!!
3、什么叫做实例化?
说简单一点就是模板调用的过程(类的调用过程)就叫做实例化!!--实例化之后产生的东西就叫做对象!
4、什么是封装?
def Dog(name,d_type):
dog1 = {
'name': name,
'd_type': d_type,
#'attack': 18,
'year': 10
}
if d_type in attack:
Dog["attack"]=attack[d_type]
else:
dog1["attack"]=15
return dog1
假设在这里我创建了一个狗类的方法和一个人类的方法,所谓封装可以简单的理解为:狗类的方法人理论上是不运行人去调用的!
多态和继承我会在后续代码中进行详细讲解!!
类的基本语法:
1、为了编程的规范:python中类首字母应该大写
直接就可以在类中定义属性
像下面这种在类中直接定义的属性,叫做类属性、类变量(是所有对象都可以公共共享的一个属性)
类中的方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身
class Dog:
#直接就可以在类中定义属性
# 像下面这种在类中直接定义的属性,叫做类属性、类变量
d_type='泰迪'
def hello(self): #方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身
print('Hello!,I am a',self.d_type)
当类写完之后,我们需要对类进行实例化,将其变成一个真正的实体,对象---python中一切皆对象