首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法正确使用具有类继承的其他类中的函数

无法正确使用具有类继承的其他类中的函数
EN

Stack Overflow用户
提问于 2019-06-26 15:33:10
回答 3查看 63关注 0票数 1

我正在尝试使用类Card中的card_number()和card_suit()方法来确定类规则中的last_card套装和编号

代码语言:javascript
运行
复制
class Card:

    def __init__(self, card):
        self.card = card
        self.number = self.card_number(card)
        self.suit = self.card_suit(card)

    def card_number(self, card):
        card = self.card
        number = card[0]
        return number


    def card_suit(self, card):
        card = self.card
        suit = card[-1]
        return suit

class Rules(Card):

    def __init__(self, last_card, card):
        Card.__init__(self, card)
        self.last_card = last_card
        self.last_card_number = self.card_number(self.last_card)
        self.last_card_suit = self.card_suit(self.last_card)

它看起来像是当我访问函数时,他们保存了卡片,并且只适用于卡片变量,也适用于最后一张卡片

现在我得到的是:

代码语言:javascript
运行
复制
a = Rules(last_card="As", card = "5c")
print(a.card) -> "5c"
print(a.number)-> "5"
print(a.suit) -> "c"

print("last_card")
print(a.last_card) -> "As"
print(a.last_card_number) -> "5"
print(a.last_card_suit) -> "c"

我期待着:

代码语言:javascript
运行
复制
a = Rules(last_card="As", card = "5c")
print(a.card) -> "5c"
print(a.number)-> "5"
print(a.suit) -> "c"

print("last_card")
**print(a.last_card) -> "As"
print(a.last_card_number) -> "A"
print(a.last_card_suit) -> "s"**
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-26 15:51:08

用这种方式更新你的代码,

代码语言:javascript
运行
复制
class Card:

    def __init__(self, card):
        self.card = card
        self.number = self.card_number(card)
        self.suit = self.card_suit(card)

    @staticmethod
    def card_number(card):
        # card = self.card
        number = card[0]
        return number

    @staticmethod
    def card_suit(card):
        # card = self.card
        suit = card[-1]
        return suit


class Rules(Card):

    def __init__(self, last_card, card):
        Card.__init__(self, card)
        self.last_card = last_card
        self.last_card_number = self.card_number(self.last_card)
        self.last_card_suit = self.card_suit(self.last_card)
票数 0
EN

Stack Overflow用户

发布于 2019-06-26 15:52:55

正如我在评论中提到的,当您只需要Rules来容纳两个Card实例时,您不需要将Rules作为Card的超类

您可以修改您的类以实现此目的,如下所示

代码语言:javascript
运行
复制
class Card:

    #Instantiating instance attributes
    def __init__(self, card):
        self.card = card
        self.number = self.card[0]
        self.suit = self.card[-1]

class Rules:

    #Two instances of Card class
    def __init__(self, last_card, card):
        self.last_card = Card(last_card)
        self.card = Card(card)

a = Rules(last_card="As", card = "5c")
print(a.card.card)
print(a.card.number)
print(a.card.suit)

print(a.last_card.card)
print(a.last_card.number)
print(a.last_card.suit)

输出将是

代码语言:javascript
运行
复制
5c
5
c
As
A
s

您甚至可以去掉Rules类,创建两个Card类的实例,然后使用它们

代码语言:javascript
运行
复制
last_card = Card('As')
card = Card('5c')
票数 1
EN

Stack Overflow用户

发布于 2019-06-26 15:49:52

这里的问题是,您覆盖了Card类中方法的参数card

代码语言:javascript
运行
复制
def card_number(self, card):
    card = self.card
    number = card[0]
    return number


def card_suit(self, card):
    card = self.card
    suit = card[-1]
    return suit

删除这里的card = self.card行,它应该可以正常工作。它应该看起来像这样:

代码语言:javascript
运行
复制
def card_number(self, card):
    number = card[0]
    return number


def card_suit(self, card):
    suit = card[-1]
    return suit
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56767535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档