当前位置: 首页 > 面试题库 >

Python中的继承和初始化方法

令狐声
2023-03-14
问题内容

我是python的初学者。我无法理解继承和__init__()

class Num:
    def __init__(self,num):
        self.n1 = num

class Num2(Num):
    def show(self):
        print self.n1

mynumber = Num2(8)
mynumber.show()

结果: 8

还行吧。但我替换Num2

class Num2(Num):
    def __init__(self,num):
        self.n2 = num*2
    def show(self):
        print self.n1,self.n2

结果: Error. Num2 has no attribute "n1".

在这种情况下,如何Num2访问n1


问题答案:

在第一种情况下,Num2是扩展类,Num并且由于您没有重新定义__init__()in中命名的特殊方法Num2,因此它继承自Num

当类定义__init__() 方法时,类实例化将自动__init__()为新创建的类实例调用。

在第二种情况下,由于要重新定义__init__(),因此如果要扩展其行为,则需要Num2在超类(Num)中显式调用它。

class Num2(Num):
    def __init__(self,num):
        Num.__init__(self,num)
        self.n2 = num*2


 类似资料:
  • 类的继承和初始化 所有类的存储属性(包括从它的父类继承的所有属性)都必须在初始化期间分配初始值 Swift为类类型定义了两种初始化器以确保所有的存储属性接收一个初始值. 这些就是所谓的指定初始化器和便捷初始化器 指定初始化器是类的主要初始化器. 指定的初始化器可以初始化所有那个类引用的属性并且条用合适的父类初始化器来继续这个初始化过程给父类链 类偏向于少量初始化器, 并且一个类通常只有一个指定初始

  • 问题内容: 假设我有两个类:基类和子类,如下所示: 当调用子类的反初始化器时,是否调用nil来给变量赋值?还是我必须在子类的反初始化器中手动分配? 问题答案: 您可以选择在子类中包含一个内部。 如果你这样做 您会看到首先被调用是内部调用,然后 被调用。所以是,但在子类之后被调用。 该书还说(第286页): 您不允许自己调用反初始化程序。超类反初始化器由其子类继承,并且超类反初始化器在子类反初始化器

  • 在面向对象的程序设计中,定义一个新的 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类,而被继承的 class 称为基类、父类或超类。 Python 中继承的语法如下: class Parent: pass class Child(Parent): pass 在第 1 行,定义了父类 Parent; 在第 4 行,定义了子类 Child,语法

  • 问题内容: 在Python中,如果您使用相同的方法定义两个类,并希望这两个类成为父类,则如下所示: 和: 当您定义子类并以A和B的顺序添加两个父类时: 调用self.method()时使用的方法是属于A的方法,即继承列表中的第一个类: 尽管在我所有的测试用例中似乎都是如此,但我无法在文档或在线中找到在任何平台和该语言实现中都可以安全使用的地方。任何人都可以肯定地说,假设列表中的第一个继承的类将始终

  • 初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer,例如: model.add(Dense(64, kernel_initializer='random_uniform', bias

  • 初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是init,例如: model.add(Dense(64, init='uniform')) 预定义初始化方法 uniform lecun_uniform: 即有输入节点数之平方根放缩后的均匀分布初始化(LeCun 98). normal identity:仅用于权值矩