super().__init__()方法

super(),会得到一个特殊的对象,该对象就是专门用来
访问父类中的属性的(严格按照继承的关系)

super().init(),
这里__init__()括号中不需要传参self, 有其他参数传其他参数即可。

super().init() 的作用就是继承父类的init,并且可以修改,如果不加这句话,那么就是无法继承。除非子类不定义__init__()。

"""普通情况"""
class OldboyPeople:
    school='oldboy'
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class OldboyStudent(OldboyPeople):
    def __init__(self,name,age,sex,stu_id): 
     self.stu_id=stu_id
    def choose_course(self):
     pass
obj2 = MyClass2("chen",12,1,"123") # 虽然接收了这些参数,但是并没有给对象添加属性
# print obj2.name # 会报错,子类的类对象没有name属性
print(obj2.__dict__) # {"stu_id":"123"}
# 如果把子类的__init__方法注释掉,实例化传参obj2 = MyClass2("chen",12,1),就会调用父类的__init__方法,也就是说通常情况下,父类的__init__方法和子类的__init__方法只能用一个


"""使用super().__init__()后"""
class OldboyPeople:
    school='oldboy'
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class OldboyStudent(OldboyPeople):
    def __init__(self,name,age,sex,stu_id):
        super().__init__(name,age,sex)
        self.stu_id=stu_id

    def choose_course(self):
        print('%s is choosing course'%self.name)
        # return 'true'
        # 函数自带返回值none,如果把return 'true'这一行注释的话,
        # 那么打印的print(stu1.choose_course())这个结果就会是:tank is choosing course
        # 并且还会打印出有None。

stu1=OldboyStudent('tank',19,'male',1)
print(stu1.__dict__)
print(stu1.choose_course())

上述程序输出的打印结果如下所示:
{
    
    'name': 'tank', 'age': 19, 'sex': 'male', 'stu_id': 1}
tank is choosing course
None

猜你喜欢

转载自blog.csdn.net/caihuanqia/article/details/114286679