使用python类(OOP)创建函数对象?

使用python类(OOP)创建函数对象?,python,class,object,tkinter,turtle-graphics,Python,Class,Object,Tkinter,Turtle Graphics,我目前正在用python编写一个类似于“太空入侵者”的游戏。 在我尝试使用一个类来创建所有入侵者对象(海龟)之前,一切都进行得很顺利,因此我可以在调整难度时轻松地操纵我想要的敌人数量 然而,现在我已经完成了这项工作,我已经删除了海龟对象的功能,因为它们现在被视为类对象。因此,我不能使用海龟模块功能,如[object].xcor和[object].ycor,这些功能有些重要 下面是生成对象类的代码: class invaders(): def __init__(self, speed, posit

我目前正在用python编写一个类似于“太空入侵者”的游戏。 在我尝试使用一个类来创建所有入侵者对象(海龟)之前,一切都进行得很顺利,因此我可以在调整难度时轻松地操纵我想要的敌人数量

然而,现在我已经完成了这项工作,我已经删除了海龟对象的功能,因为它们现在被视为类对象。因此,我不能使用海龟模块功能,如
[object].xcor
[object].ycor
,这些功能有些重要

下面是生成对象类的代码:

class invaders():
def __init__(self, speed, position):
    self = turtle.Turtle()   # how I thought I could make them turtle objects (didn't work)
    self.color('red')   
    self.shape('circle')
    self.up()
    self.setposition(position)
    self.speed(speed)

def change_speed(newSpeed):
    invader.speed(newSpeed)   # use to make new speed if changing difficulty  #variable.changeSpeed(newSpeed)

def change_position(x, y):
    invader.setposition(x, y)
我还在下面附上了一张照片,这样你可以看到我所说的两个物体之间的区别

Self=turtle.turtle()
应该是
Self.turtle=turtle.turtle()

谢谢@Stack

Self=turtle.turtle()
应该是
Self.turtle=turtle.turtle()

感谢@Stack

对象可以包含另一个类实例,或者对象可以是(子类)另一个类的实例。您最初描述和尝试的是子类化,您决定的是包含。下面是一个(蟒蛇3)的例子,我们可以将海龟细分为入侵者:

from turtle import Turtle, Screen

class Invader(Turtle):
    def __init__(self, speed, position):
        super().__init__(shape='circle', visible=False)
        self.color('red')
        self.penup()
        self.setposition(position)
        self.speed(speed)
        self.showturtle()

    def change_speed(self, newSpeed):
        self.speed(newSpeed)

    def change_position(self, x, y):
        self.setposition(x, y)

invader = Invader('slowest', (100, 100))

invader.change_position(-100, -100)

invader.change_speed('fastest')

invader.pendown()  # try an original turtle method

invader.change_position(100, -100)

screen = Screen()

screen.exitonclick()
现在,当我们创建入侵者实例时,它将自己描述为:

>>> fred = Invader("normal", (0, 0))
>>> fred
<__main__.Invader object at 0x1021784e0>
>>> 
弗雷德=入侵者(“正常”,“0,0”) >>>弗雷德 >>> 对象可以包含另一个类实例,或者对象可以是(子类)另一个类的实例。您最初描述和尝试的是子类化,您决定的是包含。下面是一个(蟒蛇3)的例子,我们可以将海龟细分为入侵者:

from turtle import Turtle, Screen

class Invader(Turtle):
    def __init__(self, speed, position):
        super().__init__(shape='circle', visible=False)
        self.color('red')
        self.penup()
        self.setposition(position)
        self.speed(speed)
        self.showturtle()

    def change_speed(self, newSpeed):
        self.speed(newSpeed)

    def change_position(self, x, y):
        self.setposition(x, y)

invader = Invader('slowest', (100, 100))

invader.change_position(-100, -100)

invader.change_speed('fastest')

invader.pendown()  # try an original turtle method

invader.change_position(100, -100)

screen = Screen()

screen.exitonclick()
现在,当我们创建入侵者实例时,它将自己描述为:

>>> fred = Invader("normal", (0, 0))
>>> fred
<__main__.Invader object at 0x1021784e0>
>>> 
弗雷德=入侵者(“正常”,“0,0”) >>>弗雷德 >>>
实际上,您可以使用self.turtle.color(“红色”)访问海龟的颜色属性。

实际上,您可以使用self.turtle.color(“红色”)访问海龟的颜色属性。

self=turtle.turtle()
更改为
self.turtle=turtle.turtle()
。然后您可以通过
ObjectName.turlte
访问特定的海龟,并获得像
ObjectName.turlte.xcor&ObjectName.turlte.ycor
@Stack这样的坐标,所以我会改为:“self.turtle.color('red')”?如果您想访问颜色和形状变量,请更改
self.color('red'))
self.color='red'
并同样改变形状。要访问海龟的颜色和形状,请使用
ObjectName.color
ObjectName.shape
@Stack啊,非常感谢^_^没问题,很乐意提供帮助:DChange
self=turtle.turtle()
self.turtle=turtle.turtle()
。然后您可以通过
ObjectName.turlte
访问特定的海龟,并获得像
ObjectName.turlte.xcor&ObjectName.turlte.ycor
@Stack这样的坐标,所以我会改为:“self.turtle.color('red')”?如果您想访问颜色和形状变量,请更改
self.color('red'))
self.color='red'
并同样改变形状。要访问海龟的颜色和形状,请使用
ObjectName.color
ObjectName.shape
@Stack啊,非常感谢^_^没问题,很乐意帮忙:D