【发布时间】:2019-10-26 12:06:38
【问题描述】:
我对继承后 self._value 的来源感到困惑。父类只有self.value没有self._value
from abc import ABCMeta, abstractmethod
class Card(metaclass=ABCMeta):
def __init__(self, value):
self.value = value
@property
@abstractmethod
def value(self):
pass
@value.setter
@abstractmethod
def value(self, other):
pass
class BlackJackCard(Card):
def __init__(self, value):
super().__init__(value)
def is_ace(self):
return self._value == 1
def is_face_card(self):
"""Jack = 11, Queen = 12, King = 13"""
return 10 < self._value <= 13
@property
def value(self):
if self.is_ace() == 1:
return 1
elif self.is_face_card():
return 10
else:
return self._value
@value.setter
def value(self, new_value):
if 1 <= new_value <= 13:
self._value = new_value
else:
raise ValueError('Invalid card value: {}'.format(new_value))
但是,我运行了这段代码,发现我可以通过构造函数分配 Foo 来实例化 BlackJackCard 类。 self._value == self.value == Foo.
但是父类init方法没有self._value...
魔法在哪里?
【问题讨论】:
-
呃……
Card.__init__调用BlackJackCard.value(setter)赋值给self._value?