Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的类管理_Python_Oop - Fatal编程技术网

python中的类管理

python中的类管理,python,oop,Python,Oop,我现在正在使用python,对一些事情感到好奇。我不太擅长对象编程,因为我总是用命令式语言(主要是C语言)编写代码 所以我问自己 假设我有一个名为c1的类_1的实例,声明如下: c1 = class_1(bla bla bla...) 假设c1中有很多变量声明,比如 self.x = ... self.y = ... self.z = ... #etc etc 现在,我有一个类型为类2的实例,叫做c2。假设c2在c1的init()函数中声明,如下所示 c2 = class_2(bla bla

我现在正在使用python,对一些事情感到好奇。我不太擅长对象编程,因为我总是用命令式语言(主要是C语言)编写代码

所以我问自己

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

c1 = class_1(bla bla bla...)
假设c1中有很多变量声明,比如

self.x = ...
self.y = ...
self.z = ...
#etc etc
现在,我有一个类型为类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”类中包含的不同对象的许多实例,这样我就可以在物理类中使用这些变量了! 合法吗?
谢谢

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

您希望从父级中实例化一个类,比如

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
这就是你想要的。但是你需要从class_2中的父级访问东西,对吗

只需将父级传递到类_2中:

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

class Class_2(object):
    def __init__(self, class_1_instance):
        self.class_1_instance = class_1_instance
现在,您可以从类2中访问类1的变量

print(self.class_1_instance.x) # prints 1

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

c1 = Class_1()

c1
现在将包含
Class_2
的实例。该实例将能够访问
c1

的所有属性。根据我从您的问题中收集的信息,每个类_2都与特定类_1相关。我将该类称为父对象

您希望从父级中实例化一个类,比如

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
这就是你想要的。但是你需要从class_2中的父级访问东西,对吗

只需将父级传递到类_2中:

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

class Class_2(object):
    def __init__(self, class_1_instance):
        self.class_1_instance = class_1_instance
现在,您可以从类2中访问类1的变量

print(self.class_1_instance.x) # prints 1

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

c1 = Class_1()

c1
现在将包含
Class_2
的实例。该实例将能够访问
c1

的所有属性。根据我从您的问题中收集的信息,每个类_2都与特定类_1相关。我将该类称为父对象

您希望从父级中实例化一个类,比如

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
这就是你想要的。但是你需要从class_2中的父级访问东西,对吗

只需将父级传递到类_2中:

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

class Class_2(object):
    def __init__(self, class_1_instance):
        self.class_1_instance = class_1_instance
现在,您可以从类2中访问类1的变量

print(self.class_1_instance.x) # prints 1

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

c1 = Class_1()

c1
现在将包含
Class_2
的实例。该实例将能够访问
c1

的所有属性。根据我从您的问题中收集的信息,每个类_2都与特定类_1相关。我将该类称为父对象

您希望从父级中实例化一个类,比如

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
这就是你想要的。但是你需要从class_2中的父级访问东西,对吗

只需将父级传递到类_2中:

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

class Class_2(object):
    def __init__(self, class_1_instance):
        self.class_1_instance = class_1_instance
现在,您可以从类2中访问类1的变量

print(self.class_1_instance.x) # prints 1

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

c1 = Class_1()

c1
现在将包含
Class_2
的实例。该实例将能够访问
c1

的所有属性。一个技巧是将父参数传递到
类2中。\uuuuu init\uuuu
并保留它,例如:

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成员,这似乎是您所需要的

即使您可以在一个类中定义一个类,我也会敦促您不要这样做——这会导致代码不清晰,而且我怀疑实际开销可能比您预期的要大

您可以在与
class1
相同的文件中定义
class2
class1
可以从中继承,也可以简单地拥有
class2
类型的成员,但是如果您将
class2
称为带下划线的名称,例如
\u class2
,则按照惯例,您将它们设置为其所在范围的私有名称在本例中,定义为