1, 定义类:class 类名
无__init__(self)方法===================> 创建对象: 类名()
有__init__(self)方法===== 无参 ========> 创建对象: 类名()
=====有参: *args ====> 创建对象: 类名(参数1, 参数2.....)
2, 类--定义方法, 添加属性: 【方法包括:一般方法, 特殊的__init__()】
def fun(self): self.属性=默认值 #或者 def fun(self,形参): self.属性名=形参
初步练习:
######定义类:创建对象,调用方法---后天加入属性、赋值 ''' class Dog: def fun(self): print("方法一") d=Dog() d.fun() #方法一 d.name="23" print(d.name)#23 d.color="黑色" print(d.color)#黑色 ''' ''' ######定义类:创建对象,给属性赋值--预先定义属性,后天动态赋值 class Car: def describe(self): print("颜色是 %s"%self.color, "价格=%s"%self.price) c=Car() c.color="red" c.price='$23423523' c.describe() #颜色是 red, 价格=$23423523 ''' ######定义类: 创建对象 __init__()加入属性并初始化赋值--固定值 ''' class Human: def __init__(self): self.name="张三" self.age=23 print("对象初始化......") def hello(self): print("hello,this is a test word,name=%s, age=%s"%(self.name,self.age)) def work(self): pass print("work....") h=Human() h.hello() #对象初始化..... #hello,this is a test word,name=男,age=23 h2=Human() h2.work() #对象初始化...... #work.... ''' ######定义类:创建对象 __init__()加入属性并初始化赋值--动态值 class Person: def __init__(self,name,age): self.name=name self.age=age def say(self): print("my name is %s,age=%s"%(self.name,self.age)) p=Person("zs",23) p.say() #my name is zs,age=23
进阶练习:对象的相互调用, 游戏【多个人】, 人【多个骰子】, 骰子【一个点数】,
需求: 游戏开始, 打印出各个玩家的骰子点数, 判断输赢
import random ################--骰子类--################# class Dice: def __init__(self):#属性:点数 self.num=0 def move(self): self.num= random.randint(1,6) #产生1-6的整数 ################--玩家类--################# class Person: def __init__(self,name,*dices): self.name=name self.score=0 #假定: 总点数为0 self.dices=dices#定义属性+赋值:【拥有三个骰子】 def shake(self):#假定:三个骰子 【人对骰子的操作】 for d in self.dices:#骰子产生随机数 d.move() def print_all_dices(self): #打印三个骰子: 的点数 s0=self.dices[0].num s1=self.dices[1].num s2=self.dices[2].num self.score=s0+s1+s2#计算的总成绩, 判断输赢 print("%s----骰子点数是:[%s,%s,%s], 一共:%s"%(self.name, s0, s1, s2, self.score ) ) ################--游戏类--################# class Game: def __init__(self,*persons): self.persons=persons self.max_score=0#该场次游戏的最大分数 self.winers=[] #存放所有赢家名字,考虑到平手,有多个人胜出 def start(self): for per in self.persons:#遍历所有玩家 per.shake() per.print_all_dices() if per.score>self.max_score:#记录此次游戏:最大分数 self.max_score=per.score def get_winers(self):#取出:所有玩家的---单次(三骰子)总分,比较大小 for per in self.persons:#遍历所有玩家 if per.score==self.max_score: self.winers.append(per.name)#添加所有:赢家名字 name=self.winers.__str__().strip("[]").strip('') print("赢家是:%s, 得分=%s\n"%(name,self.max_score)) self.max_score=0 self.winers.clear() #清空此次记录 ###准备三个骰子, 给玩家 d1=Dice() d2=Dice() d3=Dice() ###调用game-->person-->dice p=Person("张三",d1,d2,d3) p2=Person("李四",d1,d2,d3) p3=Person("王五",d1,d2,d3) p4=Person("周六",d1,d2,d3) game=Game(p,p2,p3,p4) while True: game.start() game.get_winers() option=input("是否继续:y?n----->") if option=="n": break #运行结果 ''' 张三----骰子点数是:[5,3,2], 一共:10 李四----骰子点数是:[4,2,6], 一共:12 王五----骰子点数是:[1,1,4], 一共:6 周六----骰子点数是:[1,5,4], 一共:10 赢家是:'李四', 得分=12 是否继续:y?n-----> 张三----骰子点数是:[2,4,5], 一共:11 李四----骰子点数是:[4,5,1], 一共:10 王五----骰子点数是:[5,2,4], 一共:11 周六----骰子点数是:[1,4,4], 一共:9 赢家是:'张三', '王五', 得分=11 是否继续:y?n-----> 张三----骰子点数是:[5,4,5], 一共:14 李四----骰子点数是:[4,6,5], 一共:15 王五----骰子点数是:[2,2,2], 一共:6 周六----骰子点数是:[2,3,1], 一共:6 赢家是:'李四', 得分=15 是否继续:y?n-----> '''