如何在python中实现c++类成员的等价物,返回指向另一个类的指针?
How does one implement in python the equivalent of a C++ class member that returns a pointer to another class?
具有c++背景,我目前正在尝试学习Python,并试图了解如何编写没有指针的代码。在一个具体的例子中,我想知道如何在Python中实现以下c++代码:
class Room: public MapSite
{
public:
Room(int roomNo);
MapSite* GetSide(Direction) const; // Direction is an enum
void SetSide(Direction, MapSite*);
virtual void Enter(); // An inherited method from MapSite class
private:
MapSite* sides(4);
int roomNo;
}
上面的例子来自
设计模式:可重用的面向对象软件的元素
我想知道如何在Python中实现上述功能,特别是GetSide()函数和使用指向另一个类的指针的sides变量。谢谢你。
<标题>编辑:我最初想知道的是,如何以python的方式实现我提供的c++类,但一开始并没有完全实现。我现在意识到这个要求太宽泛了,尽管其中一些答案对我很有帮助,并使我走上了正确的道路。
标题>问题是任何变量或属性在Python中都是引用。如果你想把一个对象存储为一个类的属性,只需赋值它;Python存储引用
与c++的一些区别:在Python中,一切都是对象,变量包含对对象的引用,而不是对象本身。如果你想要一个类的对象有属性,在构造函数__init__中赋值它们。包括构造函数在内的每个成员函数都有第一个参数self。每当你调用成员使用属性a时,你必须添加self。F()和self.a。请注意,实际上您一直在使用"未引用指针"(引用)。对于c++程序员来说,一个主要的陷阱是认为可以在函数形参中返回一个值,因为它是一个引用。但是,如果在函数内部给函数形参赋值,那么它之后将是对新赋值对象的引用。因此调用者传递的对象不会被改变。我建议你学习一些Python教程,并注意Cython,因为它可以让你将c++和Python知识结合起来。
你的程序看起来像这样:
class Room (MapSite):
def __init__ (self, room_no):
self._room_no = room_no
self._map_site = None
def get_side (self, direction):
return ...
def set_side(self, direction, map_site):
...
# No need to define enter since it is inherited
我将尽可能多地解释代码中的每一行
class Room: public MapSite {
声明一个继承MapSite
的类Room
,你可以这样做
class Room(MapSite):
在Python中。这里MapSite
也必须是一个要继承的类。
公众:房间(int roomNo);
要在类中声明构造函数,可以在Python中使用__init__
。
def __init__(self, roomNo)
现在,如何在Python中编写enum
?你可以通过enum
模块做到这一点请参考:我如何表示'枚举'在Python中?
关于c++中的private
或public
关键字,您不需要在这里直接使用它们,因为Python中没有定义这些令牌。
祝你学习Python顺利!我大约在9年前从c++切换到c++,现在用c++编程感觉就像石器时代。
在Python中,每次传递一个对象时,都会传递引用,从而使指针过时。所以你的Python代码可以简单地写成:
class Room(MapSite):
def __init__(self, roomNo):
self.__roomNo = roomNo
self.__sides = []
def GetSide(direction):
return self.__sides[direction] # Presumably
def SetSide(direction, side):
self.__sides[direction] = side
def Enter():
# Your code here...
在Python中,所有函数都被视为虚函数。成员前的双下划线使其为"私有"。'this'指针在Python中是显式的,按照惯例被称为'self'。
所有成员变量都应该在构造函数('init'函数)中定义,直接在类作用域中定义的成员相当于c++的静态成员。
- 在函数中返回无符号字符数组,但不返回指针
- 为什么需要返回指针来利用协方差?
- 野牛如何在解析树中返回指针
- 何时返回指针与返回对象的一般经验法则?
- 为什么使用 std::istream_iterator 构造函数返回指针
- 为什么我不能直接从返回指针的函数返回对指针的引用?
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 为什么下面的代码段返回指针指向的值而不是指针的地址?
- 使用 map<char,strring> 的迭代器返回指针 map<char,strring>*
- 如何从类成员函数返回指针,例如 size_t * class :: function(); 并使用类析构函数 ~size
- 函数返回动态强制转换的指针,返回指针,就好像它根本没有被转换一样
- 从函数返回对指针的引用与返回指针相同?
- C++ 为什么访问数组中的元素会返回指针?
- 关于函数返回指针
- 返回指针或对私有成员的引用的替代方法
- 从函数返回指针
- 通过从当地的C风格阵列中返回指针来获取一个悬空的指针
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 为什么C 模板功能不支持返回指针
- 返回指针的语句 - 解释它是如何工作的以及为什么