我没有完全理解课程。我已经阅读了python文档和其他一些教程。我了解了它的基本要点,但不了解细微差别。例如在我的代码中:
class whiteroom():
""" Pick a door: red, blue, green, or black. """
do = raw_input("> ")
if "red" in do:
print "You entered the red room."
elif "blue" in do:
print "You entered the blue room."
elif "green" in do:
print "You entered the green room."
elif "black" in do:
print "You entered the black room."
else:
print "You sit patiently but slowly begin to stave. You're running out of time."
return whiteroom()
game = whiteroom()
game
(原始键盘)
我想回到教室的白色房间。这是不可能的,或者是做不正确的。如果您能弄清楚如何返回一个类,或如何将两个类“链接”在一起,以便在白色空间上重复其他房间,并且在调用时返回其他房间(将成为类),那就太好了。
另外,我非常不稳定,__init__
仍然不确定其目的是什么。每个人都不断告诉我它“初始化”了,我敢肯定,但是,这似乎并没有帮助我的大脑。
函数与类有很大的不同。好像您已使用一个函数,并将其更改def
为class
。我猜这在您的情况下 最 有效,但并不是应该上课的方式。
类包含函数(方法)和数据。例如,您有一个球:
class Ball(object):
# __init__ is a special method called whenever you try to make
# an instance of a class. As you heard, it initializes the object.
# Here, we'll initialize some of the data.
def __init__(self):
# Let's add some data to the [instance of the] class.
self.position = (100, 100)
self.velocity = (0, 0)
# We can also add our own functions. When our ball bounces,
# its vertical velocity will be negated. (no gravity here!)
def bounce(self):
self.velocity = (self.velocity[0], -self.velocity[1])
现在我们有一Ball
堂课。我们如何使用它?
>>> ball1 = Ball()
>>> ball1
<Ball object at ...>
它看起来不是很有用。数据是有用的地方:
>>> ball1.position
(100, 100)
>>> ball1.velocity
(0, 0)
>>> ball1.position = (200, 100)
>>> ball1.position
(200, 100)
好吧,很酷,但是与全局变量相比有什么优势?如果您还有另一个Ball
实例,它将保持独立:
>>> ball2 = Ball()
>>> ball2.velocity = (5, 10)
>>> ball2.position
(100, 100)
>>> ball2.velocity
(5, 10)
并ball1
保持独立:
>>> ball1.velocity
(0, 0)
现在bounce
我们定义的那个方法(类中的函数)呢?
>>> ball2.bounce()
>>> ball2.velocity
(5, -10)
该bounce
方法导致它修改velocity
自身的数据。再次,ball1
没有被感动:
>>> ball1.velocity
球很齐整,但是大多数人并没有模仿它。您正在制作游戏。让我们考虑一下我们拥有的东西:
因此,让我们腾出一个房间。房间有名称,因此我们将有一些数据来html" target="_blank">存储:
class Room(object):
# Note that we're taking an argument besides self, here.
def __init__(self, name):
self.name = name # Set the room's name to the name we got.
让我们做一个实例:
>>> white_room = Room("White Room")
>>> white_room.name
'White Room'
臭 但是,如果您希望不同的房间具有不同的功能,那么这并不是那么有用,所以让我们创建一个 子类 。一个 子类 继承其所有功能 超
,但你可以添加更多的功能或者覆盖超类的功能。
让我们考虑一下我们要如何处理房间:
我们想与房间互动。
我们该怎么做?
用户键入一行得到响应的文本。
它的响应方式取决于房间,因此让我们使用称为的方法来处理房间interact
:
class WhiteRoom(Room): # A white room is a kind of room.
def __init__(self):
# All white rooms have names of 'White Room'.
self.name = 'White Room'
def interact(self, line):
if 'test' in line:
print "'Test' to you, too!"
现在,让我们尝试与之交互:
>>> white_room = WhiteRoom() # WhiteRoom's __init__ doesn't take an argument (even though its superclass's __init__ does; we overrode the superclass's __init__)
>>> white_room.interact('test')
'Test' to you, too!
您最初的示例是在房间之间移动。让我们使用一个名为的全局变量current_room
来跟踪我们所在的房间。1让我们也创建一个红色房间。
1.除了全局变量外,这里还有更好的选择,但是为了简单起见,我将使用一个。
class RedRoom(Room): # A red room is also a kind of room.
def __init__(self):
self.name = 'Red Room'
def interact(self, line):
global current_room, white_room
if 'white' in line:
# We could create a new WhiteRoom, but then it
# would lose its data (if it had any) after moving
# out of it and into it again.
current_room = white_room
现在让我们尝试一下:
>>> red_room = RedRoom()
>>> current_room = red_room
>>> current_room.name
'Red Room'
>>> current_room.interact('go to white room')
>>> current_room.name
'White Room'
读者练习: 添加代码WhiteRoom
的interact
,可以让你回到红厅。
现在我们可以正常工作了,让我们将它们放在一起。利用name
所有房间的新数据,我们还可以在提示中显示当前房间!
def play_game():
global current_room
while True:
line = raw_input(current_room.name + '> ')
current_room.interact(line)
您可能还想创建一个功能来重置游戏:
def reset_game():
global current_room, white_room, red_room
white_room = WhiteRoom()
red_room = RedRoom()
current_room = white_room
将所有的类定义和这些函数放到一个文件中,您可以在这样的提示下播放它(假设它们在中mygame.py
):
>>> import mygame
>>> mygame.reset_game()
>>> mygame.play_game()
White Room> test
'Test' to you, too!
White Room> go to red room
Red Room> go to white room
White Room>
为了仅通过运行Python脚本就可以玩游戏,您可以在底部添加以下代码:
def main():
reset_game()
play_game()
if __name__ == '__main__': # If we're running as a script...
main()
这是对类以及如何将其应用于您的情况的基本介绍。
我对面向对象编程有这种困惑。对于我编写的一些代码,我必须回答一些问题: 此代码中使用的OOP原则是什么 它们是如何应用的 解释此代码中使用的OOP概念 在这里,我不理解这两个词“原则”和“概念”之间的区别。它们是一样的吗?还是不同? 我知道有4个面向对象的原则。 继承权 在我的代码中,我有setter方法、getter方法、抽象类、类之间的继承。所以我的回答是: > 继承,抽象,封装,多态性。 我
简单的数据类型以及赋值 变量不需要声明 Python的变量不需要声明,你可以直接输入: >>>a = 10 那么你的内存里就有了一个变量a, 它的值是10,它的类型是integer (整数)。 在此之前你不需要做什么特别的声明,而数据类型是Python自动决定的。 >>>print(a) >>>print(type(a)) 那么会有如下输出: 10 <class 'int'> 这里,我们学到一个内
问题内容: 我目前有一些单元测试,它们共享一组通用的测试。这是一个例子: 上面的输出是: 有没有办法重写上面的内容,这样就不会调用第一个? 编辑: 而不是运行上面的5个测试,我希望它仅运行4个测试,其中2个来自SubTest1,另外2个来自SubTest2。似乎Python unittest自己在运行原始的BaseTest,我需要一种机制来防止这种情况的发生。 问题答案: 使用多重继承,因此具有通
基类既可能是派生类的直接基类,也可能是派生类的间接基类。在声明派生类时,派生类的首部要显式地列出直接基类。间接基类不是显式地列在派生类的首部,而是沿着类的多个层次向上继承。
前面课程对光源的介绍主要是从认识光源的角度介绍的,本节课主要从编写代码角度介绍,根据类的继承关系设置光源对象的相关属性。 你查看文档SpotLight、DirectionalLight、环境光AmbientLight等光源对象都有一个共同的基类Light,光源Light也有一个基类Object3D。也就是说Threejs环境光、点光源等子类光源可以继承Light和Object3D两个父类的属性和方
刚开始学习java大约一个月,我有几个关于arraylist和oop的问题 这个arraylist允许我将字符串添加到列表中并存储它,但是如果我有一个类调用簿呢 这三者有什么区别?假设我有大量的输入,比如文件 我有一个班级运动 我该怎么做呢?所以我用许多参数来添加这些输入,因为如果我想添加,我通常会这样做 我也会去