我正在编写一个矩阵类,并希望将同一类的方法放入属性类中
class Matrix:
def __init__(
self,
rows: int=None,
columns: int=None,
values: list[int | float | list[int | float]]=None
) -> None:
self.__rows = 3 if not rows else (3 if rows <= 0 else rows)
self.__columns = 3 if not columns else (3 if columns <= 0 else columns)
self.__values = [
[
random.randint(-10, 10)
for _ in range(self.__columns)
]
for _ in range(self.__rows)
] if not values and self.__rows != 1 \
else [
random.randint(-10, 10)
for _ in range(self.get_columns)
] if self.__rows == 1 else values
self.T = self.__transposition()
def __transposition(self) -> typing.Self:
return Matrix(
self.__columns,
self.__rows,
[
[
self.__values[j][i]
for j in range(self.__rows)
]
for i in range(self.__columns)
]
)
if name == 'main':
a = Matrix(rows=2)
print(a.T)
但有深度递归
File "Matrix.py", line 25, in __init__
self.T = self.__transposition()
^^^^^^^^^^^^^^^^^^^^^^
File "Matrix.py", line 47, in __transposition
return Matrix(
^^^^^^^
RecursionError: maximum recursion depth exceeded
可以做什么?我尝试通过静态方法装饰器运行它,但没有任何效果。
好吧,你立即
__init__调用转置,并在转置中创建一个新对象,这样你就得到了无限递归。有必要在初始化期间不要调用转置,而是在访问属性时调用转置
T;为此,它必须是带有装饰器的方法@property:您可以像这样编写它,而不是将其声明
T为方法:本质上与上面大致相同,但没有中间方法,“简单地”属性
T成为方法的属性__transposition。