接上一篇博客
1、类
#类,存放该类对象的共同属性
class Dog():
def info(self):#self是接受类的实例化对象本身
print(self)
print("狗祖宗")
def attack(self):
print("咬人")
jingmao = Dog()
jingmao.info()#介样子调用
print(jingmao)#jingmao就是self,jingmao是一个实例
#添加jingmao属性
jingmao.name = 'xiaocai'
jingmao.hp = 200
jingmao.att = 450
print(jingmao.name,jingmao.hp)
jingmao.attack()#介样子调用
输出:
<main.Dog object at 0x000001E99E26F9D0>
狗祖宗
<main.Dog object at 0x000001E99E26F9D0>
xiaocai 200
咬人
神奇的__init__函数
class Dog():
def __init__(self):#初始化,在实例化对象的时候自动执行一下的代码块
self.name = 'xiaocaigou'
self.hp = 2000
self.att = 450
self.armor = 200
def info(self):
print("%s的生命力%d"%(self.name,self.hp))
jinmao = Dog()
jinmao.info()#能打印,因为他自动初始化了
输出:
xiaocaigou的生命力2000
__init__函数也可以传参
class Dog():
def __init__(self,name,hp,att,armor):#初始化,在实例化对象的时候自动执行一下的代码块
self.name = name
self.hp = hp
self.att = att
self.armor = armor
def info(self):
print("%s的生命力%d"%(self.name,self.hp))
jinmao = Dog('xiaocaigou',2000,450,200)#__init__函数可以传参
hashiqi = Dog('xiaoshagou',2000,100,400)
jinmao.info()
hashiqi.info()
输出:
xiaocaigou的生命力2000
xiaoshagou的生命力2000
神奇的__str__函数
class Dog():
def __init__(self,name,hp,att,armor):#初始化,在实例化对象的时候自动执行一下的代码块
self.name = name
self.hp = hp
self.att = att
self.armor = armor
def info(self):
print("%s的生命力%d"%(self.name,self.hp))
def __str__(self):#如果直接打印对象的话,要输出来的信息,没有这个魔法函数,直接打印对象会输出地址
return 'self.name,self.hp'
jinmao = Dog('xiaocaigou',2000,450,200)#__init__函数可以传参
hashiqi = Dog('xiaoshagou',2000,100,400)
jinmao.info()
hashiqi.info()
print(jinmao)
输出:
xiaocaigou的生命力2000
xiaoshagou的生命力2000
self.name,self.hp
2、继承
#继承
#父类
class Dog():
def __init__(self):
self.name = 'dogdad'
def skill(self):
print("attack people")
class Dog2():
def __init__(self):
self.name = 'dogmom'
def skill(self):
print("attack dog")
def skill2(self):
print("yaoweiba")
#子类
class Son(Dog,Dog2):#儿子继承了两个父类这样写
pass
jinmao = Son()
print(jinmao.name)#儿子继承了父类,所以子类什么都没写也有name,若两个父类有同样属性,优先继承第一个
jinmao.skill()
jinmao.skill2()
输出:
dogdad
attack people
yaoweiba
#继承
#父类
class Dog():
def __init__(self):
self.name = 'dogdad'
def skill(self):
print("attack people")
class Dog2():
def __init__(self):
self.name = 'dogmom'
def skill(self):
print("attack dog")
def skill2(self):
print("yaoweiba")
#子类
class Son(Dog,Dog2):#儿子继承了两个父类这样写
def __init__(self):
self.name = 'gouson'
def skill(self):
print('tiangou')
print(jinmao.name)#子类重写了所以就是自己的
jinmao.skill()#子类重写了所以就是自己的
jinmao.skill2()
输出:
gouson
tiangou
yaoweiba
#如果子类重写了依然想调用父类
class Dog():
def __init__(self):
self.name = 'dogdad'
def skill(self):
print("attack people")
class Dog2():
def __init__(self):
self.name = 'dogmom'
def skill(self):
print("attack dog")
def skill2(self):
print("yaoweiba")
#子类
class Son(Dog,Dog2):#儿子继承了两个父类这样写
def __init__(self):
self.name = 'gouson'
def skill(self):
print('tiangou')
#如果子类重写了依然想调用父类,用super
def dad_skill(self):
super().__init__()
super().skill()
super().skill2()
jinmao = Son()
jinmao.skill()
jinmao.dad_skill()
输出:
tiangou
attack people
yaoweiba
4、多层继承
#多层继承,父类的功能子类都有
class Dog():
def __init__(self):
self.name = 'dogdad'
def skill1(self):
print("attack people")
class Son(Dog):
def __init__(self):
self.name = 'dogmom'
def skill2(self):
print("attack dog")
def skill3(self):
print("yaoweiba")
#子类
class grandson(Son):
def __init__(self):
self.name = 'gouson'
def skill4(self):
print('tiangou')
jinmao = grandson()
jinmao.skill2()
输出:attack dog
5、多态
#多态
class Dog():
def __init__(self):
self.name = 'dog dad'
def skill(self):
print('attack people')
class Son1(Dog):
def skill(self):
print('attack man')
class Son2(Dog):
def skill(self):
print('attack women')
class Son3(Dog):
def skill(self):
print('attack children')
son1 = Son1()
son2 = Son2()
son3 = Son3()
son1.skill()
son2.skill()
son3.skill()
输出:
attack man
attack women
attack children