gpt4 book ai didi

Python:嵌套类而不使导入复杂化

转载 作者:行者123 更新时间:2023-12-01 00:19:03 24 4
gpt4 key购买 nike

概念问题:我有一个名为 shape 的文件,其中包含直线、正方形、矩形等的类......

class Line:
def __init__(self, length):
self.length = length

class Square(Line):
def __init__(self, length):
super().__init__(length)

def area(self):
print(self.length * self.length)

当前要创建一个正方形,我运行:

mySquare = shape.Square(5) # 5 being the length of the sides.

“shape”指的是我的文件 shape.py,Square 指的是文件中的 Square 类。如果我将 Square 嵌套在名为 Shape 的类中,那么我是否必须运行:

$ square = shape.Shape.Square(5)

我想为“shape”创建一个类属性来列出形状的所有实例。将形状嵌套在“形状”类中是实现此目的的正确方法吗?

这对我来说是一个精神障碍,希望能帮助您了解解决这种情况的最佳方法。随着应用程序变得越来越复杂,这似乎是一个常见问题,尤其是在构建 API 的同时保持命名和导入尽可能简单时。

最佳答案

这大概是您正在寻找的内容吗:

import weakref

class Shape:
all_shapes = []
def __init__(self, *args, **kwargs):
self.all_shapes.append(weakref.ref(self))

@classmethod
def get_all_shapes(cls):
for wref in cls.all_shapes:
shape = wref()
if shape:
yield shape

class Line(Shape):
def __init__(self, length):
super().__init__(length)
self.length = length

class Square(Line):
def __init__(self, length):
super().__init__(length)

def area(self):
print(self.length * self.length)



l = Line(1)
l2 = Line(2)
print(list(Shape.get_all_shapes()))
del l
print(list(Shape.get_all_shapes()))
s = Square(5)
print(list(Shape.get_all_shapes()))

关于Python:嵌套类而不使导入复杂化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com