Python中创建多个类或多个对象?

2024-06-28 19:00:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下问题,我需要关于如何在Python中以最佳技术解决它的建议。由于我对编程不熟悉,我想有一些建议。在

所以我将有下面的对象,他们应该存储一些东西。下面是一个例子:

  1. 目标1:现金股利(它们将具有以下性质)

    • exdate(将存储日期列表)
    • recorddate(将存储日期列表)
    • 付款日期(将存储付款清单)
    • ISIN(将存储文本列表)
  2. 对象2:stocksplits(它们将具有以下特性)

    • 库存(将是一些定量供应)
    • exdate(日期列表)
    • 。。。在

我试过这样解决它:

class cashDividends(object):

    def __init__(self, _gross,_net,_ISIN, _paydate, _exdate, _recorddate, _frequency, _type, _announceddate, _currency):
        self.gross = _gross
        self.net = _net
        self.ISIN = _ISIN
        self.paydate = _paydate
        self.exdate = _exdate
        self.recorddate = _recorddate
        self.frequency = _frequency
        self.type = _type
        self.announceddate = _announceddate
        self.currency = _currency

所以如果我有这个,我将不得不创建另一个名为stockplits的类,然后再次定义一个__init__函数。在

然而,有没有一种方法可以让我有一个类,比如“公司行动”,然后在那里进行股票分割和cashdividends?在


Tags: 对象self列表netinittype建议currency
3条回答

严格地说,这个答案不是最后一个问题的答案。然而,这是一种让你的生活稍微轻松一点的方法。在

考虑创建一种模板类(我使用的是松散的术语;在Python中没有这样的东西),它可以让__init__为您工作。像这样:

class KwargAttrs():
    def __init__(self, **kwargs):
        for k,v in kwargs.items():
            setattr(self, k, v)
    def _update(self, **kwargs):
        args_dict = {k:(kwargs[k] if k in kwargs else self.__dict__[k]) for k in self.__dict__} 
        self.__dict__.update(args_dict)

此类将提供的每个关键字参数用作对象属性。使用方法如下:

^{pr2}$

使用这样的方法,您不必遍历参数列表并分配每个对象属性;这是自动发生的。在

我们将通过super()对父类的方法调用来预订在__init__方法中需要完成的所有工作。我们这样做是因为locals()返回一个dict函数当前名称空间中的每个变量,因此您需要1.)在任何其他工作污染它之前捕获该名称空间;2.)更新名称空间,以防任何工作更改参数值。在

update的调用是可选的,但是如果在调用super().__init__()之后对它们执行了某些操作,则不会更新所提供参数的值(也就是说,除非使用setattr(self, 'argname,value)`更改值,这不是一个坏主意)。在

您可以这样继续使用该类:

class StockSplits(KwargAttrs):
    def __init__(self, stocksplitratio, gross, net, ISIN, paydate, exdate, recorddate, frequency, type, announceddate, currency):
        super().__init__(**locals())

如其他答案所述,您可以为我们的其他类创建一个容器,但您甚至可以使用相同的模板类来创建容器:

class CorporateActions(KwargAttrs):
    def __init__(self, stock_splits , cash_dividends):
        super().__init__(**locals())

ca = CorporateActions(stock_splits = StockSplits(<arguments>), cash_dividends = CashDividends(<arguments>) )

如果我正确地理解了你想要的是一个对象,这个对象包含你创建的类中的其他对象作为属性?在

class CorporateActions(object):
    def __init__(self, aCashDividend, aStockSplit):
        self.cashDividend = aCashDividend
        self.stockSplit = aStockSplit


myCashDividends = CashDividends(...) #corresponding parameters here
myStockSplit = StockSplit(...)
myCorporateActions = CorporateActions(myCashDividends, myStockSplit)

当然可以!在python中,可以将类传递给其他类。 这里有一个简单的例子:

class A():
    def __init__(self):
        self.x = 0


class B():
    def __init__(self):
        self.x = 1


class Container():
    def __init__(self,objects):
        self.x = [obj.x for obj in objects]

a = A()
b = B()
c = Container([a,b])

c.x

[0,1]

相关问题 更多 >