python中的类管理

2024-10-03 15:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在和python一起工作,想知道一些事情。我不太擅长对象编程,因为我总是用命令式语言(主要是C)编写代码。在

所以我在问自己。在

假设我有一个名为c1的类的实例,声明如下:

c1 = class_1(bla bla bla...)

假设c1里面有很多变量声明,比如

^{pr2}$

现在,我有一个类型为2的实例,名为c2。假设c2是在c1的init()函数中声明的,就像这样

c2 = class_2(bla bla bla...)

现在,我想知道我怎么能。。。从c2内部访问c1的对象?在

有人可以说我可以让类2继承自类1。事实上那不是我想要的。原因是,类“1”应该以逻辑方式包含类“2”的对象,但类“2”需要从类“1”访问变量! 如果我要让类2从类1继承,我就必须。。。在外部(对类)代码中声明类2对象。我想在外部代码中使用类1对象。我怎样才能合理地做到这一点呢?开始变成噩梦。。。在

谢谢!在

编辑时间:

我使用它的背景。。。我的任务是写一个小空间的电子游戏。我得计算太空中的轨道。我还有一张地图。一些参数,如加速度、转速等。。。特定于“地图”:也就是说,我们设计一个有障碍物的地图,但是根据地图的不同,一些物理常数会有所不同。 我还有一个'physcis'类来处理与轨迹、位置上升等相关的不同计算。 所以我只想能够使用“map”类中包含的不同对象的很多很多实例,这样我就可以在物理类中使用这些变量了! 合法吗? 谢谢!在


Tags: 对象实例代码语言声明编程地图物理
2条回答

根据我从你的问题中收集到的信息,每一个2类都与一个特定的类1相关。我将该类称为父对象。在

你想从父类中实例化一个类2,所以

class Class_1(object):
    def __init__(self):
        self.x = 1 # Your instance variables here
        self.y = 2
        self.class_2_instance = Class_2()

class Class_2(object):
    def __init__(self):
        pass

是你想要的。但是你需要从2类的家长那里获取信息,对吗?在

只需将父类传递到2类:

^{pr2}$

现在您可以从类_2中访问类1的变量。在

print(self.class_1_instance.x) # prints 1

编辑:自从我开始写这个回复以来,你已经在评论中澄清了你的问题,所以现在我知道了c1和{}是什么,我可以向你展示如何使用我在这里编写的代码:

^{4}$

c1中现在将包含一个Class_2的实例。该实例将能够访问c1的所有属性。在

一个技巧是将父参数传递到class2.__init__中并保留它,例如:

class class2:
    def __init__(self, parent, ):
        """ Create an instance of class2 saving the parent """
        # You might wish to assert that parent is type class1 here
        self.parent = parent

这将允许您从类2中以self.parent.member的形式访问类1成员,这似乎是您所需要的。在

即使你能在一个类中定义一个类,我也希望你不要这样做——这会导致代码不清晰,而且我怀疑实际上会有比你预期的更多的开销。在

您可以在同一个文件中定义class2,并且class1可以从中继承,也可以简单地拥有class2类型的成员,但是如果您将class2称为带下划线的名称,如_class2_,那么按照惯例,您将使它们对定义它们的作用域是私有的,在本例中是定义它们的文件,(注意:在python中private是一种约定,而不是强制的,更像是一种绅士协议,警告私有成员在任何新版本中都可能被修改/删除)。在

请注意,定义类与创建类实例不同。在

只是想看看能不能做到我试着:

^{pr2}$

这是因为在init完成之前,类A的其余部分不存在,所以在使用之前,需要在init中定义类B-

>>> class A:
...     def __init__(self):
...         class B:
...             def __init__(self):
...                 self.b = 3
...         self.a = 2
...         self.b = B()
... 
>>> a=A()
>>> a.b.b
3
>>> 

相关问题 更多 >