gpt4 book ai didi

python - 为什么我的@property 装饰器不工作?

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:32 25 4
gpt4 key购买 nike

我正在研究这个小类,使用@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 很高兴地顺其自然,并将“奶酪”分配给排名。这里发生了什么?通过赋值语法对 rank setter 的所有其他调用似乎都愉快地忽略了我已经放置的 setter。我正在运行 Python 2.7.5。

最佳答案

您使用的是旧式类。如 the documentation 中所述,属性不适用于旧式类。从 object 派生您的类。例如:

class Card(object):
...

在 Python 3 中你不需要这样做,因为 Python 3 只有新式类。

关于python - 为什么我的@property 装饰器不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17777671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com