Python 为什么我需要打电话给';引号';在这种情况下,与使用self相反?
好吧,我是编程新手,正在通过制作一个基于文本的游戏来学习类的使用,但我不确定为什么使用Death.quips代替self.quips,或者更确切地说,为什么不使用Death.quips代替self.quips。我认为这与当地人对俏皮话的引用有关,但我不知道为什么你必须在特定情况下使用每种俏皮话。谢谢Python 为什么我需要打电话给';引号';在这种情况下,与使用self相反?,python,class,reference,attributes,Python,Class,Reference,Attributes,好吧,我是编程新手,正在通过制作一个基于文本的游戏来学习类的使用,但我不确定为什么使用Death.quips代替self.quips,或者更确切地说,为什么不使用Death.quips代替self.quips。我认为这与当地人对俏皮话的引用有关,但我不知道为什么你必须在特定情况下使用每种俏皮话。谢谢 引号是类变量,而不是实例变量。如果它是一个实例变量,那么应该使用 class Death(Scene): quotes = [ "You are dead.",
引号
是类变量,而不是实例变量。如果它是一个实例变量,那么应该使用
class Death(Scene):
quotes = [
"You are dead.",
"Haha. bad.",
"Sorry, you died.",
"Probably should try something different."
]
def enter(self):
print Death.quotes[randint(0, len(self.quips)-1)]
exit(1)
并且需要在提供self
参数的方法中设置(如enter
方法中所示)
类变量通过ClassName.variable
访问,而类内的实例变量通过self.variable
访问
这里有一个很好的参考:
quotes
是类变量,而不是实例变量。如果它是一个实例变量,那么应该使用
class Death(Scene):
quotes = [
"You are dead.",
"Haha. bad.",
"Sorry, you died.",
"Probably should try something different."
]
def enter(self):
print Death.quotes[randint(0, len(self.quips)-1)]
exit(1)
并且需要在提供self
参数的方法中设置(如enter
方法中所示)
类变量通过ClassName.variable
访问,而类内的实例变量通过self.variable
访问
这里有一个很好的参考:
quotes
是类变量,而不是实例变量。如果它是一个实例变量,那么应该使用
class Death(Scene):
quotes = [
"You are dead.",
"Haha. bad.",
"Sorry, you died.",
"Probably should try something different."
]
def enter(self):
print Death.quotes[randint(0, len(self.quips)-1)]
exit(1)
并且需要在提供self
参数的方法中设置(如enter
方法中所示)
类变量通过ClassName.variable
访问,而类内的实例变量通过self.variable
访问
这里有一个很好的参考:
quotes
是类变量,而不是实例变量。如果它是一个实例变量,那么应该使用
class Death(Scene):
quotes = [
"You are dead.",
"Haha. bad.",
"Sorry, you died.",
"Probably should try something different."
]
def enter(self):
print Death.quotes[randint(0, len(self.quips)-1)]
exit(1)
并且需要在提供self
参数的方法中设置(如enter
方法中所示)
类变量通过ClassName.variable
访问,而类内的实例变量通过self.variable
访问
这里可以找到一个很好的参考:假设
quips
你的意思是quotes
你实际上可以使用其中任何一种,但它们的效果略有不同
如果使用Death.quotes
这将在类Death
中查找名为quotes
的属性并使用它
如果使用self.quotes
这将首先查看实例self
的内部,然后查看实例self
的类中名为quotes
的属性。在您的特定示例中,这与调用Death.quotes的行为相同,因为self
是类Death
的一个实例,但有一些关键区别需要注意:
1) 如果您的实例变量self
也有一个名为quotes
的属性,那么它将被访问,而不是使用与以下示例相同的名称访问class属性:
self.quotes = [...]
2) 如果self
是Death
子类的一个实例,并且该子类定义了自己的类变量名quotes
,则使用self.quotes
将改为使用属性,如下例所示
class Death(Scene):
quotes = [
'some awesome quote',
]
def __init__(self):
sef.quotes = ['foo']
def some_method(self):
# This will print out 'some awesome quote'
print Death.quotes[0]
# This will print out 'foo'
print self.quotes[0]
既然您已经了解了这一点,我将告诉您,通过子类化支持扩展实际上(通常)是一件好事,我本人将使用self.quotes
而不是Death.quotes
,但是理解原因是很重要的。假设你所说的“俏皮话”的意思是“引用”,你实际上可以使用其中任何一种,但它们的效果略有不同
如果使用Death.quotes
这将在类Death
中查找名为quotes
的属性并使用它
如果使用self.quotes
这将首先查看实例self
的内部,然后查看实例self
的类中名为quotes
的属性。在您的特定示例中,这与调用Death.quotes的行为相同,因为self
是类Death
的一个实例,但有一些关键区别需要注意:
1) 如果您的实例变量self
也有一个名为quotes
的属性,那么它将被访问,而不是使用与以下示例相同的名称访问class属性:
self.quotes = [...]
2) 如果self
是Death
子类的一个实例,并且该子类定义了自己的类变量名quotes
,则使用self.quotes
将改为使用属性,如下例所示
class Death(Scene):
quotes = [
'some awesome quote',
]
def __init__(self):
sef.quotes = ['foo']
def some_method(self):
# This will print out 'some awesome quote'
print Death.quotes[0]
# This will print out 'foo'
print self.quotes[0]
既然您已经了解了这一点,我将告诉您,通过子类化支持扩展实际上(通常)是一件好事,我本人将使用self.quotes
而不是Death.quotes
,但是理解原因是很重要的。假设你所说的“俏皮话”的意思是“引用”,你实际上可以使用其中任何一种,但它们的效果略有不同
如果使用Death.quotes
这将在类Death
中查找名为quotes
的属性并使用它
如果使用self.quotes
这将首先查看实例self
的内部,然后查看实例self
的类中名为quotes
的属性。在您的特定示例中,这与调用Death.quotes的行为相同,因为self
是c