OOP:Python-方法调用中的重复值
我是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
类对象:
事物=[]
定义初始化(自我,表格):
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-让我失望的只是我对类变量的理解,而您最初让我意识到了这一点。是的,这被标记为答案:)