python - 我定义的实例变量和 win 变量以及 play_game 方法之间有什么区别。为什么也没有自我?
问题描述
from random import randint
class Card:
suits = ["spades", "hearts", "diamonds", "clubs"]
values = [None, None, "2", "3", "4", "5", "6", "7", "8",
"9", "10", "Jack", "Queen", "King", "Ace"]
def __init__(self, v, s):
"""suit + value are ints"""
self.value = v
self.suit = s
def __gt__(self, c2):
if self.value > c2.value:
return True
if self.value == c2.value:
if self.suit > c2.suit:
return True
else:
return False
return False
def __repr__(self):
v = self.values[self.value] + " of " + self.suits[self.suit]
return v
class Player:
def __init__(self, name):
self.wins = 0
self.card = None
self.name = name
class Deck:
def __init__(self):
self.cards = []
for i in range(2, 15):
for j in range(4):
self.cards.append(Card(i, j))
self.random_cards = []
for x in range(len(self.cards)):
self.x = randint(0, len(self.cards) - 1)
self.random_cards.append(self.cards[self.x])
self.cards.pop(self.x)
def rm_card(self):
if len(self.random_cards) == 0:
return
return self.random_cards.pop()
class Game:
def __init__(self):
name1 = input("p1 name ")
name2 = input("p2 name ")
self.deck = Deck()
self.p1 = Player(name1)
self.p2 = Player(name2)
def wins(self, winner):
w = "{} wins this round"
w = w.format(winner)
print(w)
def draw(self, p1n, p1c, p2n, p2c):
d = "{} drew {} {} drew {}"
d = d.format(p1n, p1c, p2n, p2c)
print(d)
def play_game(self):
cards = self.deck.random_cards
print("beginning War!")
while len(cards) >= 2:
m = "q to quit. Any key to play:"
response = input(m)
if response == 'q':
break
p1c = self.deck.rm_card()
p2c = self.deck.rm_card()
p1n = self.p1.name
p2n = self.p2.name
self.draw(p1n, p1c, p2n, p2c)
if p1c.__gt__(p2c):
self.p1.wins += 1
self.wins(p1n)
else:
self.p2.wins += 1
self.wins(p2n)
win = self.winner(self.p1, self.p2)
if win == "It was a tie!":
print("It was a tie!")
else:
print("War is over.{} wins".format(win))
def winner(self, p1, p2):
if p1.wins > p2.wins:
return p1.name
if p1.wins < p2.wins:
return p2.name
return "It was a tie!"
game = Game()
game.play_game()
实例变量在 init 方法中定义,因此它们可以被初始化。但是我无法在其中定义 win(游戏类,play_game 方法)变量,因为我还没有 init 方法中的所有参数。那么 win 变量和实例变量之间有什么区别,为什么我不在那里使用 self 呢?
解决方案
你不使用'self'来赢得胜利的原因是因为它只需要存在于创建它的方法中,而其他变量(即在方法之外定义的东西)必须存在于多个函数中总是(init以及在您实现这些值的任何函数中)。使用 win 变量,它仅在您的 play_game() 方法中需要,因此不需要 self.
推荐阅读
- java - 将字符串解析为日期的异常
- mongodb - 如何执行不包括空连接的 graphLookUp?
- sql - 根据状态获取不常见的记录
- tableau-api - 为什么我的计算不能应用于我的过滤器画面
- java - 当我们在实体中使用嵌套的 JoinColumn 时,SQL 数据库中会发生什么
- css - CSS 圆圈问题 - 边界半径不起作用
- bash - grep 一个词,需要为该特定标签替换上述行
- java - 打开套接字时,我的程序似乎什么都不做
- python - 在网站中,使用Beautifulsoup进行文章时间爬取不工作
- android - 使用 Ffmpeg 与多个图像交叉淡入淡出动画