加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python之子类继承父类时进行初始化的一些问题

发布时间:2020-12-20 09:52:41 所属栏目:Python 来源:网络整理
导读:直接看代码: class Person: def __init__ (self): self.name = " jack " Student(Person): (self): self.school = 一中 " stu = Student() print ( 学生的姓名是: " ,stu.name) 此时,程序是不能正常运行的,运行之后报错: 这是为什么呢? __init__相当于

直接看代码:

class Person:
    def __init__(self):
        self.name = "jack"
 Student(Person):
    (self):
        self.school = 一中"
stu = Student()
print(学生的姓名是:",stu.name)

此时,程序是不能正常运行的,运行之后报错:

这是为什么呢?

__init__相当于是python类的构造方法,在类进行实例化时被调用,当子类和父类中都存在构造方法时,子类中需要显示调用父类的构造方法 。需要注意的是python中构造方法是不能进行重载的,当有多个构造方法存在时,会默认调用最后一个构造方法。修改后的代码如下:

(self):
        super(Student,self).__init__()
        self.school = 

super(Student,self).__init__():其中super关键字表示父类,Student是本类的名称,self指代本类自己。

在python中如何设置私有属性和方法?

将属性和方法前面加上__(双下划线)。加上了私有的属性和方法不能在类外进行访问,同时,子类继承父类的属性和方法时,在子类中也不能够访问父类的私有属性和方法。

举个例子:

(self):
        self.__name = "
    __test(self):
        这是父类的私有方法)
(self):
        super(Student,self).()
        super().()
        self.school =  Student()

以上代码会报错:

要想访问到父类的私有属性和方法,需这样做:


        self.age = 12
    )
    def test(self):
        这是父类的公有方法 printStudent(self):
        #子类自己继承了父类的公有属性,直接访问即可
        在子类中使用父类的共有属性:,self.age)
        super()代表父类,可以访问父类的公有方法
        当然如若子类没有重写父类的方法,也可以使用self.test()来调用
        super和self区别:super是指代父类,self指代该类本身
        super().test()
        对于父类的私有属性和方法,需要通过_父类名__属性或方法名来访问
        super()._Person__test()
        self._Person__test()
stu =学生的年龄是:

需要明确的是python中并没有真正意义上的私有修饰符,从以上的代码也可以看出。Python在运行时会将__属性或方法转换成:_类名__属性或方法。通过这种方式就可以访问到类私有属性或方法。还有一种方式就是通过在类内部再定义一个公有方法,来调用私有的属性或方法,在子类进行调用时调用这个公有的方法即可,这也就是面向对象中封装的作用之一,在接下来会结合进行介绍。

那么假设父类的构造器带有参数,那么在子类中应该如何进行初始化呢?

子类要在初始化的时候显示调用父类的有参构造,并且传入相应的参数,具体代码如下:

(self,name,age):
        self.name = name
        self.__age = age
     test(self):
        self.()
         setAge(self,age):
        self. getAge(self):
        return self.__age
__init__(name=name,age=age)
        self.school = school
     stuTest(self):
        super().test()
        所在学校为:tom)
stu.stuTest()
学生的姓名是:学生的年龄是:

补充:

假设父类中没有显示的定义构造函数,那么在子类中就不用显示的定义父类的构造函数。

什么都没有 Student:
     name
stu = Student(姓名是:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读