c++ 如何在python中创建一个结构点?

xn1cxnb4  于 2023-02-01  发布在  Python
关注(0)|答案(4)|浏览(136)

我正在Pygame中基于https://www.youtube.com/watch?v=zH_omFPqMO4制作一个俄罗斯方块克隆,我需要知道如何转动

struct Point
{int x,y;} a[4],b[4];

从C++转换成Python。

z31licg0

z31licg01#

因此,C++代码struct point {int x, y} a[4], b[4]创建了一个新的structure,它是一个包含两个整型xy的数据类型。a[4]b[4]是两个创建的point类型的数组,每个数组的大小为4
要在python中复制structure,我们可以使用class
示例:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

a = []
b = []

# Creating an instance of the Point object
myPoint = Point(5, 6)

# Adding said point to our array
a.append(myPoint)
7fhtutme

7fhtutme2#

首先,我要重复评论中所说的话:不要试图直接翻译。用Python编写你的项目。Python的工作方式不同。在C++中,你处理内存,并证明什么是安全的内存。在Python中,你直接处理高层的类。它们处于不同的抽象层,试图直接翻译将导致非常笨拙和僵硬的代码。
无论如何,在Python中用类编写Point类型的方法是

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

但是这还有很多需要改进的地方:首先,点在相等性方面是不可比较的;其次,如果你试图把它们打印出来,你会得到一些笨拙的Python指针式语法;相反,对于基本的结构式数据,你需要dataclasses

@dataclass
class Point:
    x: float
    y: float

现在,您可以免费获得等式和字符串化,以及一个漂亮的构造函数和一个用于创建类似示例的replace函数。(这是一个很棒的主意,我强烈推荐),然后你可以抛出一个frozen=True作为dataclass装饰器的参数,这样你就可以免费得到散列了,这意味着你可以使用点作为字典的键。

@dataclass(frozen=True)
class Point:
    x: float
    y: float

除此之外,您可能希望像__add__那样实现magic methods,以便可以在Point类型上使用+这样的运算符(读者要注意:我链接的那篇文章中有一些Python 2中过时的内容。一定要阅读附录2以了解它们之间的差异,但尽管年代久远,它仍然是对各种神奇方法的最佳总结之一)

4urapxun

4urapxun3#

这里我们使用列表解析来创建大小为4的列表,每个元素都初始化为Point(0,0)

class Point: 
    def __init__(self, x, y):
        self.x = x 
        self.f = y    

#create lists named a of size 4 
a = [Point(p-p,p-p) for p in range(4) ]  #equivalent to a = [Point(0,0), Point(0,0), Point(0,0), Point(0,0)

#create list named b of size 4
b = [Point(p-p,p-p) for p in range(4) ]
0h4hbjxa

0h4hbjxa4#

那么C++中类就是结构化的?

struct Point{int x,y;}a[4]b[4]

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

a = []
b = []

# Creating an instance of the Point object
myPoint = Point(5, 6)

# Adding said point to our array
a.append(myPoint)
b.append(myPoint)

相关问题