首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codacy坏的第一个论点给超级

Codacy坏的第一个论点给超级
EN

Stack Overflow用户
提问于 2017-10-05 07:30:27
回答 1查看 1.9K关注 0票数 4

codacy在通过Codacy检查某些代码时,给出了以下代码的一个问题:

代码语言:javascript
复制
def MyClass(OldClass):
    def __init__(self, arg1, arg2, *args, **kwargs)
        self.arg1 = arg1
        self.arg2 = arg2
        super(OldClass, self).__init__(*args, **kwargs)

有以下解释:

为什么这是个问题? 例如,使用基类作为第一个参数调用super()是错误的: 类AnotherOldStyleClass(OldStyleClass):def __init__(self):super(OldStyleClass,self).__init__() 应: 超级(AnotherOldStyleClass,self).__init__()

它似乎想让我这么做:

代码语言:javascript
复制
def MyClass(OldClass):
    def __init__(self, arg1, arg2, *args, **kwargs)
        self.arg1 = arg1
        self.arg2 = arg2
        super(OldClass, self).__init__(*args, **kwargs)

也许是这样的:

代码语言:javascript
复制
def MyClass(OldClass):
    def __init__(self, arg1, arg2, *args, **kwargs)
        super(MyClass, self).__init__(*args, **kwargs)
        self.arg1 = arg1
        self.arg2 = arg2

有人能告诉我哪一个是正确的,为什么这是首选的行为?

作为参考,这里是我使用选项2找到的示例。

编辑:这是我的代码,正如它所显示的。这解释了我的错误:

代码语言:javascript
复制
class TransferToBigQuery(GoogleCloudStorageToBigQueryOperator): 
    """Class to transfer data from Google cloud storage to Big Query""" 
    def __init__( 
        self, id, bucket, destination_project_dataset_table, source_objects=None, 
        schema_fields=None, schema_object=None, source_format='CSV', 
        create_disposition='CREATE_IF_NEEDED', 
        skip_leading_rows=0, write_disposition='WRITE_EMPTY', 
        field_delimiter=',', max_id_key=None, file_xcom=None, 
        bigquery_conn_id='bigquery_default', 
        google_cloud_storage_conn_id='google_cloud_storage_default', 
        delegate_to=None, schema_update_options=(), *args, **kwargs): 
        super(GoogleCloudStorageToBigQueryOperator, self).__init__(*args, 
                                                               **kwargs) 

为什么推荐这样做?

EN

回答 1

Stack Overflow用户

发布于 2019-12-19 13:35:42

我希望下一个例子能解释其中的区别。

代码语言:javascript
复制
class Grandparent(object):
    def hello(self):
        print "hi, I am Grandparent"

class Parent(Grandparent):
    def hello(self):
        print "hi, I am Parent"

class Child(Parent):
    def test(self):
        super(Parent, self).hello()   # print "hi, I am Grandparent"
        super(Child, self).hello()  # print "hi, I am Parent"

    def proper_way_to_do_same(self):
        Grandparent.hello(self)   # print "hi, I am Grandparent"
        Parent.hello(self)  # print "hi, I am Parent"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46580179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档