我发现这个方法在python中链接,但即使有了它我也无法理解Python中的方法链接.
这里的目标是两个:解决编码问题并理解方法链(考虑到我仍然没有100%对callables有信心).
直到问题定义.
我想要一个有两个方法的类:一个设置object ='line'的参数,另一个设置覆盖'bar'.
这是我到目前为止所得到的:
class foo():
def __init__(self, kind=None):
self.kind = kind
def __call__(self, kind=None):
return foo(kind=kind)
def my_print(self):
print (self.kind)
def line(self):
return self(kind='line')
def bar(self):
return self(kind='bar')
Run Code Online (Sandbox Code Playgroud)
可悲的是,通过这段代码,我可以实现我的目标
a = foo()
a.bar().line().bar().bar().line().my_print()
Run Code Online (Sandbox Code Playgroud)
但是我希望通过编写这段代码来获得相同的结果
a = foo()
a.bar.line.bar.bar.line.my_print()
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?我想我定义__call__方法的方法有点不对劲.在此先感谢您的帮助.
当我尝试执行Google开发人员API的请求时.购买().产品(5).get()我收到403错误:projectNotLinked.
该消息告诉我"用于调用Google Play Developer API的项目ID尚未在Google Play开发者控制台中链接."
此时,我可以转到控制台,取消链接以前的项目,并链接这个,运行代码,代码工作.
但是,我不能永久地取消上一个项目的链接:我需要将它们保持联系.我该如何解决这个问题?
我环顾四周,无法找到解决方案.试图打电话给谷歌,他们告诉我他们不支持这种请求.
提前致谢.
我在 Python 中使用 SQLAlchemy 并声明我的类继承自声明性基础,如下所示:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class SomeClass(Base):
__tablename__ = 'some_table'
id = Column(Integer, primary_key=True)
name = Column(String(50))
Run Code Online (Sandbox Code Playgroud)
作为用户,我想将 定义__tablename__为参数,而不是硬编码的 value ,如下所示:
class SomeClass(Base):
__tablename__ = f'{environment}_some_table'
id = Column(Integer, primary_key=True)
name = Column(String(50))
Run Code Online (Sandbox Code Playgroud)
我的理解是,f'{environment}_some_table'当我导入这个包时将对其进行评估,因此我将无法在稍后阶段(即在交互式笔记本中)修改它。我有一段损坏的代码试图通过嵌套类和封装来解决这个问题,但我没有设法引用外部类的实例变量。
class Outer:
def __init__(self, env):
self.environment = env
class SomeClass(Base):
__tablename__ = f'{self.environment}_some_table'
id = Column(Integer, primary_key=True)
name = Column(String(50))
Run Code Online (Sandbox Code Playgroud)
我读过几个 SO 问题,最好不要使用嵌套类,因为这些类之间没有建立特殊关系。那么我应该使用什么样的设计来解决这个问题呢?
提前致谢!