问答题
1. 什么是类,什么是对象? 类是具有一组相同或者相似属性和行为的一系列对象,是一个模板,包含多个函,函数里实现一些功能。 对象:是实实在在存在的一个东西,类的实例化(具象化),根据模板创建的实例,通过实例对象可以执行类中的函数。
2. python中定义一个类的语法格式是什么?
class 类名():
属性-----类属性、实例属性
行为-----实例方法
3. 类由哪三部分构成? 类名,属性,方法
4.init方法有什么作用,如何定义? 是一种初始化函数,可以初始化实例属性
class 类名():
def __init__(self,name,age):
self.name=name
self.age=age
5.方法中self代表什么?
self代表对象本身,是对对象的引用
6.在类中定义init方法的时候第一个形参必须是self吗?瑟利夫可以用其他东西代替吗? 不一定必须是self,任何东西都可以
7.python面向对象中的魔术方法,是如何定义的,魔法方法需要开发人员去调试吗?
def __xxx__():
代码块
#不需开发人员调试
8.str方法可以没有返回值。这句话对吗? 错误,str方法是自定义格式输出的,如果不返回,这个数据就输出不了
9. 学会判断 类属性、实例属性、实例方法
课后实操题
1.python中如何通过类创建对象,请用代码举例说明。
class Person():
....
xiaoming=Person() #创建一个对象xiaoming,括号里的参数是init方法中要用的参数
2.如何在类中定义一个方法,请用代码举例说明。
class Person():
def init(self,name):
self.name=name
pass
def run(self.name):
print('%s快跑'.format(self.name))
pass
3.定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象、并分别添加上颜色属性。
class fruits():
def __init__(self,name,color):
self.name=name
self.color=color
pass
def __str__(self):
return '{}是{}的'.format(self.name,self.color)
pass
apple=fruits('苹果','红色')
print(apple)
orange=fruits('橘子','橙色')
print(orange)
watermelon=fruits('西瓜','绿色')
print(watermelon)
4. 请编写代码,验证slfe就是实例本身
class Person:
def weight(self):
print('self=%s'%(id(self)))
pass
pass
liming=Person() #创建对象
liming.weight() #调用函数
print(id(liming)) #打印对象地址
#输出:
self=2044440088096
2044440088096
5.定义一个Animal类(1)使用__init__初始化方法为对象添加初始属性,如颜色、名字、年龄。(2)定义动物方法,如run、eat等方法。如调用eat方法时打印xx在吃东西就可以。(3)定义一个__str__方法,输出对象的所有属性。
class Animal:
def __init__(self,name,color,age):
self.name=name
self.color=color
self.age=age
pass
def run(self,speed):
print('%s跑的%s'%(self.name,speed))
pass
def eat(self):
print('{}在吃东西'.format(self.name))
pass
def __str__(self):
return '{}的颜色是{},年龄是{}'.format(self.name,self.color,self.age)
pass
car=Animal('猫','黄色',3)
car.run('很快')
car.eat()
print(car)
#输出
猫跑的很快
猫在吃东西
猫的颜色是黄色,年龄时3
案例:决战紫荆之巅
# 第一步:需要定义一个类【角色类】
import time # 导入时间的包
class Role:
def __init__(self,name,hp):
'''
构造初始化函数
:param name:角色名字
:param hp: 角色血量
'''
self.name=name
self.hp=hp
pass
def tong(self,enemy):
'''
捅一刀
:param enemy: 敌人
:return:
'''
enemy.hp-=10 #敌人减掉10滴血
info='【%s】捅了【%s】一刀'%(self.name,enemy.name)
print(info)
pass
def kanren(self,enemy):
'''
砍人
:param enemy: 敌人
:return:
'''
enemy.hp-=15 #敌人减掉15滴血
info = '【%s】砍了【%s】一刀'%(self.name, enemy.name)
print(info)
pass
def chiyao(self):
'''
吃药补血
:return:
'''
self.hp+=10
info = '【%s】吃补血药,增加10滴血' % (self.name)
print(info)
pass
def __str__(self):
return '%s还剩%s的血量'%(self.name,self.hp)
pass
# 创建2个【西门吹雪、叶孤城】实例化对象
# xmcx=Role('西门吹雪',100)
# ygc=Role('叶孤城',100)
# 开始玩游戏-----手动
# xmcx.tong(ygc) #西门吹血捅叶孤城一刀
# print(xmcx) #直接打印对象(地址格式)-----要打印具体内容,需要__str__方法
# print(ygc)
# print('****************************************')
# ygc.kanren(xmcx)
# xmcx.chiyao()
# print(xmcx)
# print(ygc)
# print('****************************************')
# ygc.tong(xmcx)
# ygc.chiyao()
# print(xmcx)
# print(ygc)
#要变成自动的(循环三种打法):
xmcx = Role('西门吹雪', 100)
ygc = Role('叶孤城', 100)
while True:
if xmcx.hp<=0 or ygc.hp<=0:
# 满足条件退出循环
break
pass
xmcx.tong(ygc) # 西门吹血捅叶孤城一刀
print(xmcx) # 直接打印对象(地址格式)-----要打印具体内容,需要__str__方法
print(ygc)
print('****************************************')
ygc.tong(xmcx)
print(xmcx)
print(ygc)
print('****************************************')
xmcx.chiyao()
print(xmcx)
print(ygc)
time.sleep(1) #休眠暂停一秒钟
pass
print('对战结束......')