xinbinhuang commented on a change in pull request #16521:
URL: https://github.com/apache/airflow/pull/16521#discussion_r655743068



##########
File path: airflow/hooks/dbapi.py
##########
@@ -53,6 +53,8 @@ class DbApiHook(BaseHook):
     supports_autocommit = False
     # Override with the object that exposes the connect method
     connector = None  # type: Optional[ConnectorProtocol]
+    # Override to use different schema from connection setting
+    schema = None

Review comment:
       > self.schema = None in its __init__ without worrying the value getting 
overridden by super().__init__.
   
   Hmm, shouldn't `super().__init__` being ran before other subclass-specific 
params? Also, all other superclass shouldn't worry about `self.schema = 
<schema>` because it should be captured by `super().__init__()`
   ```python
   def __init__(self, *args, **kwargs):
       super.__init__(*args, **kwargs)    # `schema` should go in here
   ```
   
   I think it's rather confusing right now because we're mixing class attribute 
and instance attribute. What's the purpose of `schema` at the class level? When 
we do `self.schema = None` in subclass, the class attribture `schema` will 
simply get ignored and hidden by the instance attibute `self.schema`. i.e.
   
   ```python
   class Parent:
       schema = None
   
   
   class Child(Parent):
   
       def __init__(self, schema):
           self.schema = schema
   
   
   child = Child('postgres')
   
   print(child.__class__.schema)
   print(child.schema)
   print(Child.schema)
   print(Parent.schema)
   
   # None
   # postgres
   # None
   # None
   ```
   
   




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to