Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OOP:Python-方法调用中的重复值_Python_Python 3.x_Oop - Fatal编程技术网

OOP:Python-方法调用中的重复值

OOP:Python-方法调用中的重复值,python,python-3.x,oop,Python,Python 3.x,Oop,我是OOP python新手,为了理解如何处理实例,我有一个方法: 类对象: 事物=[] 定义初始化(自我,表格): self.table=表格 self.things.append(表) ( ... ) def thingy(self): 返回self.db.execute(f“从{self.table}中选择日期、p1、p2”) 定义所有内容(自我): 自我扩展( 映射(lambda t:Object(thing=t+''u thing').thingy(),Constants.THINGS

我是OOP python新手,为了理解如何处理实例,我有一个方法:

类对象:
事物=[]
定义初始化(自我,表格):
self.table=表格
self.things.append(表)
( ... )
def thingy(self):
返回self.db.execute(f“从{self.table}中选择日期、p1、p2”)
定义所有内容(自我):
自我扩展(
映射(lambda t:Object(thing=t+''u thing').thingy(),Constants.THINGS))
归还自己的东西
现在我该如何调用这个对象,因为我的对象是由一个来自
常量的列表驱动的。THINGS
,即:
THINGS=[“table1”,“table2”…]
,但是为了创建对象来调用方法
all_THINGS()
,我必须设置一个对象-即使该方法设置了调用的对象

这感觉有点落后,所以请理解我的误解,因为我认为我需要更改构造函数/对象

a = Object(end_date="2020-01-05",
           start_date="2020-01-01",
           thing=WHAT_TO_PUT_HERE).all_things()
如果我给这个
东西添加任何东西
我会得到一个双输出

谢谢你的帮助

  • 更新:
期望的输出是,
thing()
将根据
常量提供的列表输入触发。THINGS
,如果我们输入:
THINGS=[“table1”,“table2”]
我们期望
thingy()
执行两次:

从表1中选择日期、p1、p2
从表2中选择日期、p1、p2

这将被添加到
things
类变量中,然后当
all_things()
完成时,我们应该在列表中有两个select语句的内容

但是,

Object.things


实际上会有
[这里要放什么,表1,表2]
好的,所以不要像
self.table
那样在每个实例上都重置@Axe319通知我的类变量。我更改了构造函数,使其仅具有:

class Object:
    def __init__(self, table):
        self.table = table
        self.things = list()
然后,当我在类外调用特定方法时:

all_things()
我可以将
None
传递到表中,因为该方法为我构建了表。i、 e:

a = Object(thing=None).all_things()
这可能是一种反模式——我也是OOP新手,但它正在创建一些看起来正确的东西

是的,我同意,事情,事情,对于这个问题的变量来说,这是一个糟糕的选择


谢谢

根据您的更新,这就是我认为您正在尝试的

class Object:
    def __init__(self):
        # do some initialization
        pass

    def thingy(self, table):
        return self.db.execute(f"select date, p1, p2 from {table}")

    # call the method "thingy" on all Constants.THINGS
    def all_things(self):
        map(self.thingy, Constants.THINGS)

然后在课堂之外你会这样称呼它

my_instance = Object()
my_instance.all_things()

我假设这个类也会对数据库连接进行一些设置和拆卸。以及其他一些事情,但这只是一个简单的尝试,试图给出一个它应该如何工作的例子。

您在这里到底想要实现什么?你能给出一个你期望的输出的可复制的例子吗?因为它是一个类变量。它不会像
self.table
那样在每个实例中都被重置。它是在第一次解释类时初始化的。好的,谢谢。--如果我的想法是正确的,我可以在构造函数中列出
事物
,然后使用
self.things
?我可以建议你使用比thing、thingy和所有事物更清晰的变量名吗。您使用的是查询和表,如果您只是根据实际需要命名方法等,可能更容易理解。此外,您的
\uuuu init\uuuuu
只需要一个参数,
,但稍后您尝试用三个参数调用它,
结束日期
开始日期
东西
?感谢Axe319-让我失望的只是我对类变量的理解,而您最初让我意识到了这一点。是的,这被标记为答案:)