1、类的定义:
class 类名:
方法列表
例如:
class Car: #创建一个类
def start(self): #构建的方法里面需要加一个self,代表类本身,如果不加,会出现错误
print("")
def print_car_info(self):
print("名称:%s,颜色:%s"%(self.name, self.color))
car1=Car() #创建对象
car1.name="迈腾" #封装数据,给属性赋值
car1.color="红色" #封装数据,给属性赋值
car1.print_car_info() #打印给汽车赋值的值
car1.start() #调用汽车类里面的方法,参数self是指类自己,不用传参
注意:方法当中,第一个参数必须为self,代表调用这个方法的对象
2、系统方法的理解
__init__方法是在构建对象的时候,系统会自动调用init方法,进行初始化。
def __init__(self, height): #init前后各有两个下划线,传入的实参必须要加在self之后
self.name="zs"
self.age=18
self.height=height #给全局变量赋值
print("对象初始化")
__str__方法是将对象转换成字符串返回
def __str__(self):
return "名称:%s,颜色:%s"%(self.name, self.color)
__del__方法是在对象没有引用的时候,将内存回收掉
def __del__(self):
print("对象即将要被销毁,内存回收")
例如:
class User:
def __del__(self):
print("对象即将要被销毁,内存回收")
user1 = User()
user2 = user1
del user1 #删除变量user1,不删除内存中的User对象
del user2 #真正的删除内存中的User对象,因为没有引用了
总结:
1)在python中方法名如果是__xx__的,那么就是有特殊功能的方法,因此叫做“魔法”方法。当使用print输出对象的时候,只要自已定义了__str__(self)方法,那么就会打印从这个方法中return的数据,此方法类似于java当中的toString()方法。
2)当内存中构建一个对象数据的时候回调__init__()方法
3)当内存中销毁一个对象时回调__del__()方法
4)当有1个变量保存了对象的引用时,此对象的引用计数就会加1
5)当使用del删除变量指向的对象时,如果对象的引用计数不是1,比如是3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除。
3、骰子游戏
每次游戏有两个人,每人有三颗骨子,比较两人掷出的骰子点数总大小。
import random
class Game(object):
def __init__(self, player1, player2):
self.player1 = player1
self.player2 = player2
def start_game(self):
self.player1.cast()
self.player2.cast()
print(self.player1)
print(self.player2)
get_win()
def get_win(self):
if self.player1.get_total_dice() == self.player2.get_total_dice():
print("%s和%s打平,掷的点数总大小为:%s"%(self.player1.name, self.player2.name, self.player1.get_total_dice()))
elif self.player1.get_total_dice() > self.player2.get_total_dice():
print("%s胜,%s掷的点数总大小为:%s, %s掷的点数总大小为:%s"%(self.player1.name, self.player1.name, self.player1.get_total_dice(), self.player2.name, self.player2.get_total_dice()))
else:
print("%s胜,%s掷的点数总大小为:%s, %s掷的点数总大小为:%s"%(self.player2.name, self.player2.name, self.player2.get_total_dice(), self.player1.name, self.player1.get_total_dice()))
class Dice(object):
#使用默认参数,为骰子定义一个默认值
def __init__(self, count=0):
self.count = count
def move(self):
#随机数是包头又包尾的,骰子数字为6个数字,1-6
self.count = random.randint(1, 6)
class Player(object):
def __init__(self, name, sex, *dices):
self.name = name
self.sex = sex
* self.dices = dices
def cast(self):
for dice in self.dices:
dice.move()
def get_total_dice(self):
total = 0;
for i in self.player_dice_count_list:
total += i
return total
def __str__(self):
self.player_dice_count_list=[self.dices[0].count, self.dices[1].count, self.dices[2].count]
return "姓名为:%s, 投掷的骰子点数信息为:%s"%(self.name, str(self.player_dice_count_list))
#游戏开始前准备六颗骰子
d1 = Dice()
d2 = Dice()
d3 = Dice()
d4 = Dice()
d5 = Dice()
d6 = Dice()
#游戏里面需要两个玩家对象
p1 = Player("张三", "男", d1, d2, d3)
p2 = Player("小花", "女", d4, d5, d6)
#一共要玩5次游戏
for i in range(0,5):
game = Game(p1, p2)
game.start_game()
print("第%s次游戏的情况......"%i)
作者:沧水巫云
博客:http://blog.csdn.NET/amir_zt/
以上原创,转载请注明出处,谢谢。
https://blog.csdn.net/amir_zt/article/details/83987334