首页 > 编程语言 >python 面向对象 继承

python 面向对象 继承

时间:2023-08-15 14:40:57浏览次数:54  
标签:__ python 继承 self 面向对象 init var Class def



 https://cloud.tencent.com/developer/article/1915788

修改代码以解决报错

class Class_1():

   var_1 = 1

   

   def __init__(self):

       self.var_2 = var_1


class Class_2(Class_1):

   

   def __init__(self):

       self.var_4 = self.var_2


obj = Class_2()

---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

Cell In[21], line 12

     9     def __init__(self):

    10         self.var_4 = self.var_2

---> 12 obj = Class_2()


Cell In[21], line 10, in Class_2.__init__(self)

     9 def __init__(self):

---> 10     self.var_4 = self.var_2


AttributeError: 'Class_2' object has no attribute 'var_2'  

在这段代码中,报错是因为在Class_2的构造函数中,你尝试访问self.var_2,但是var_2并不存在于Class_2中。这是因为var_2是Class_1的实例变量,而不是Class_2的实例变量。


要解决这个问题,你可以在Class_2的构造函数中调用父类(Class_1)的构造函数,以确保var_2被正确地初始化。你可以使用super()函数来实现这一点。修改后的代码如下所示:


class Class_1():

   var_1 = 1

   

   def __init__(self):

       self.var_2 = Class_1.var_1


class Class_2(Class_1):

   

   def __init__(self):

       super().__init__()  # 调用父类的构造函数

       self.var_4 = self.var_2


obj = Class_2()


通过调用super().__init__(),你可以确保Class_1的构造函数被调用,从而正确初始化var_2。现在,你应该能够成功创建Class_2的实例对象,而不会再出现AttributeError的错误。



修改代码以解决报错

---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

Cell In[22], line 7

     4     def __init__(self):

     5         self.var_2 = var_1

----> 7 class Class_2(Class_1):

     8     var_3 = var_1

    10 obj = Class_2()


Cell In[22], line 8, in Class_2()

     7 class Class_2(Class_1):

----> 8     var_3 = var_1


NameError: name 'var_1' is not defined  

在这段代码中,报错是因为在Class_2的定义中,你尝试访问var_1,但是var_1并没有在Class_2的作用域中定义。这导致了NameError。


要解决这个问题,你可以使用Class_1.var_1来访问Class_1中的var_1变量。这样可以确保在Class_2中正确引用父类的变量。修改后的代码如下所示:


class Class_1():

   var_1 = 1

   

   def __init__(self):

       self.var_2 = Class_1.var_1


class Class_2(Class_1):

   var_3 = Class_1.var_1


obj = Class_2()

通过使用Class_1.var_1,你可以在Class_2中正确引用父类的变量。现在,你应该能够成功创建Class_2的实例对象,而不会再出现NameError的错误。

标签:__,python,继承,self,面向对象,init,var,Class,def
From: https://blog.51cto.com/u_16055028/7088088

相关文章

  • Python运算符全解析:技巧与案例探究
    在Python编程中,运算符是强大的工具,能够使我们在数据处理和逻辑判断方面更加灵活。本篇博客将全面探讨Python中常用的运算符,包括算术、比较、逻辑、赋值、位、成员和身份运算符,通过实际案例为你展示如何妙用运算符解决问题。算术运算符Python提供了一系列用于数值运算的算术运算符,如......
  • Python中对文件进行操作
    对于Python来说,文件处理绝对是一个常见的处理,读取文件、写入文件、生成文件……文件操作贯穿python变成始终。本篇文章将总结一下在平时编程过程中,常用的文件操作。以下将按照增删改查的顺序,对文件以及目录操作进行总结。新建文件和目录importos#新建文件new_file_path......
  • python 项目部署相关
    git代码管理和同步git本地上传全局配置gitconfig--globaluser.name"aaa"gitconfig--globaluser.email"[email protected]"进入项目目录初始化gitinit配置远程地址gitremoteaddoriginhttps://gitee.com/wupeiqi/xxxxx.git本地版本提交gitadd.g......
  • python 解决Could not import the lzma module. Your installed Python is incomplete
    python安装好pandas后import报错如下图:原因分析在执行./configure和makeinstall的时候出现错误提示,被忽略了,如下图:解决方法安装yuminstall-yxz-devel然后重新安装python,执行./configure和makeinstall......
  • C++ 调用 Python 接口 Mat转Numpy
    参考网站:https://blog.csdn.net/qq7835144/article/details/106073110?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242https://blog.csdn.net/weixin_46400740/article/details/116711323?spm=1001.2014.3001.5501 1、配......
  • esXGray开发笔记:基于直线检测的文本倾斜自动校正算法实现(python+opencv)
    昨日采用最小面积矩形的方式实现文本倾斜自动校正,但后面的角度有点麻烦,于是改用基本直线检测的算法。算法简介:检测直线,自动调节参数,至少获取11条直线(直线条数调节)计算每条直线与x轴夹角从返回的角度中找到出现次数较多的直线角度平均值并返回作为图片倾斜角度检测到角度后,就......
  • python代码中取消运行中的warning
    在Python中,可以使用warnings模块来管理和控制警告的显示。你可以通过设置警告过滤器来控制是否显示特定类型的警告。以下是一些常见的方法来处理警告:过滤警告: 可以使用warnings.filterwarnings()函数来设置警告过滤器,从而控制是否显示特定类型的警告。比如,可以使用warnings.fil......
  • python如何复现DES3加密
    importbase64fromCrypto.CipherimportDES3BS=8pad=lambdas:s+(BS-len(s)%BS)*chr(BS-len(s)%BS)#3DES的MODE_CBC模式下只有前24位有意义key=b'appapiche168comappapiche168comap'[0:24]iv=b'appapich'plaintext=pad("9f5......
  • Python写一个剪刀石头布小游戏
    #导入包importrandom#调用randint()函数,表示随机取其中的任意一个数,左闭右也毕#初始化变量n=0pc=0#表示电脑计分person=0#表示人计分whilen<3:a=random.randint(1,3)#a代表电脑b=int(input('请出拳(1.剪刀,2.石头,3.布):'))#改变变量n+=1#if判断,当电脑出剪刀时:......
  • opencv-python目标跟踪
    目标追踪(objecttracking)是指先给定视频的第一帧中的目标以及它的位置,之后不断的追踪目标,预测目标的轨迹。1目标跟踪的困难点形态变化:姿态变化是目标跟踪中常见的干扰问题。运动目标发生姿态变化时,会导致它的特征以及外观模型发生改变,容易导致跟踪失败。比如体育比赛中的运动......