【问题标题】:Creating instance of a class with random arguments in another class in python在python中的另一个类中创建具有随机参数的类的实例
【发布时间】:2020-10-15 03:14:08
【问题描述】:

如何在另一个类中创建需要参数的类的实例,并随机生成参数?

在下面的代码中,我有一个接受“高度”参数的“方形”类。然后我根据“正方形”创建一个“立方体”。问题在于“CubeTower”类中的“add_cube”方法,我无法确定是否需要提供“立方体”和“高度”或仅提供这些参数之一。当我尝试在创建具有随机边高的立方体的循环内调用“add_cube”时,这反过来会引发错误。

(我在 'Cube' 类中还有其他方法,但它们与这个问题无关,所以我没有包括它们)。

from random import randint

class Square:
    def __init__(self, height):
        self.height = height
    
class Cube:
    def __init__(self, height):
        self.base = Square(height)
                
class CubeTower:
    def __init__(self):
        self.tower = []
        
    def add_cube(self, cube, height): # This is where I think I am doing something wrong
        cube = Cube(height)
        if not self.tower:
            self.tower.append(cube)
        else:
            if cube.base.height < self.tower[-1].base.height:
                self.tower.append(cube)
    
    def randomize_tower(self):
        for c in range(2, 100):
            height = randint(1, 100)
            c = Cube(height)
            self.add_cube(c, height)

【问题讨论】:

  • 你为什么将cube 作为参数传递,只用你在里面创建的对象立即覆盖它?

标签: python class random methods arguments


【解决方案1】:

你可以做一个或另一个;一个方法不需要两者都需要。

class CubeTower:
    def __init__(self):
        self.tower = []

    def add_cube(self, cube: Cube):
        if not self.tower or cube.base.height < self.tower[-1].base.height:
            self.tower.append(cube)

    def add_cube_by_height(self, height: int):
        self.add_cube(Cube(height))       

    def randomize_tower(self):
        for _ in range(2, 100):
            height = randint(1, 100)
            # self.add_cube_by_height(height)
            c = Cube(height)
            self.add_cube(c)
            

add_cube_by_height 实际上只是对add_cube 的便捷包装,它为您创建了一个给定大小的Cube

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多