【问题标题】:Python diff between inheriting a class and just passing class instance to another class继承一个类和只将类实例传递给另一个类之间的 Python 差异
【发布时间】:2016-04-10 05:43:29
【问题描述】:

创建两个类一个继承另一个类和将第一个类实例传递给另一个类的init方法有什么区别?

如下所示, 方法一:

class ht(object):

    def __init__(self):
        pass

    def ch(self):
        self.filename="hellgmhjkl"


class tt():
    def __init__(self,ob1,ob3):
        self.ob1=ob1
        self.ob3=ob3
        self.b=5

    def display(self):
        print(ob1.filename)
        print(self.ob3.d)

class kk():
    def __init__(self):
        self.c=3

    def hel(self):
        self.d=self.c+5


if __name__ == '__main__':
    ob1=ht()
    ob1.ch()
    ob3=kk()
    ob3.hel()
    ob2=tt(ob1,ob3)
    ob2.display()

方法二:

class ht(object):

    def __init__(self):
        pass

    def ch(self):
        self.filename="hellgmhjkl"


class tt(ht):
    def __init__(self,ob1,ob3):
        self.ob1=ob1
        self.ob3=ob3
        self.b=5

    def display(self):
        print(ob1.filename)
        print(self.ob3.d)

class kk():
    def __init__(self):
        self.c=3

    def hel(self):
        self.d=self.c+5


if __name__ == '__main__':
    ob1=ht()
    ob1.ch()
    ob3=kk()
    ob3.hel()
    ob2=tt(ob1,ob3)
    ob2.display()

方法 1 和 2 的区别是什么? 我的要求是我有几个类:config.py、log.py、analyze.py、HTTPrequest.py、request.py、attack.py

以上所有类都需要来自 config.py 和 log.py 的类变量值。 而且, analyze.py 需要 request.py 和 HTTPRequest 中的值,py 和 attack.y 需要 request.py 中的值。

谁能帮助我如何继承多级或多级或 usecomposition 或仅传递类对象以及如何?

【问题讨论】:

    标签: python inheritance composition


    【解决方案1】:

    当您想修改现有对象的行为时,您从类继承;因为继承将为您提供父对象的所有现有属性、方法和行为;您所要做的就是编写您自己的自定义代码。您的新对象是父对象的派生对象。

    传递一个类意味着打算按原样使用该类的对象,也许实例化它的一个新实例。

    请记住,类只是用于创建自定义对象(或类型)的工厂。

    如果您只需要特定文件中的值,只需导入它们:

    from request import a, b, c
    from HTTPRequest import one, two, three
    

    【讨论】:

    • 当我导入带有类定义的文件时,它的方法会在导入过程本身调用之前自动执行。如何在不执行的情况下导入具有类和方法的文件。我不能在 if name__=="__main" 下包含我的类:因为我不能用封闭的 main 方法继承我的类名
    • “当我导入带有类定义的文件时,它的方法会在导入过程本身调用之前自动执行。如何在不执行的情况下导入带有类和方法的文件。” - 只有当你有一个像foo = MyClass() 这样的语句时,整个文件才会被评估,这个类才会被实例化。否则,代码会被评估,但直到需要时才会执行。
    • 用截图看看我上面的答案,代码在导入过程中被执行了两次
    【解决方案2】:

    它的工作,但方法总是执行两次:

    init.py
    

    HTTPreq.py
    

    anal.py
    

    tree_structure
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 2021-09-03
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 2016-08-27
      相关资源
      最近更新 更多