簡體   English   中英

為什么我的@property裝飾器不起作用?

[英]Why aren't my @property decorators working?

我正在研究這個小類,與@property裝飾器一起玩。 由於某種原因,它無法正常工作。

class Card:
    def __init__(self, rank, suit):
        self.rank = rank
        self.suit = suit

    @property 
    def rank(self):
        return self._rank

    @rank.setter
    def rank(self, value):
        valid_ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "J", "Q", "K", "A"]
        if valid_ranks.index(value):
            self._rank = value

    @property
    def suit(self):
        return self._suit

    @suit.setter
    def suit(self,value):
        self._suit = value

    def show(self):
        print "{}{}".format(self.rank, self.suit)

我像這樣初始化一個對象: Card("cheese", "ball") ,並且大概應該拋出一個錯誤。 Python很高興地隨它一起滾動並分配“奶酪”排名。 這里發生了什么? 通過賦值語法對等級設置器的所有其他調用似乎很高興地忽略了我放置的設置器。 我正在運行Python 2.7.5。

您正在使用舊式類。 文檔所述 ,屬性不適用於舊式類。 object派生您的類。 例如:

class Card(object):
    ...

在Python 3中,您不需要這樣做,因為Python 3僅具有新型類。

您正在初始化ranksuit屬性,但不帶下划線,但您的屬性方法具有_rank_suit

如果項目不在列表中,則list.index引發錯誤。 你應該做

if value in valid_ranks:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM