python3基础(十)-类、对象和系统方法

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

猜你喜欢

转载自blog.csdn.net/u011635351/article/details/83987334
今日推荐