第五节 继承

       print(sys.getrefcount(s)):测试一个对象有几个引用需要导入import sys模板

 

       构造方法包括创建对象初始化对象,在python当中,分为两步执行:先执行__new__方法,然后执行__init__方法;

__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。

__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。

也就是,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。

    class Dog:
    def __init__(self):
        print('init方法执行')

    def __str__(self):
        print('str方法执行')
        return '对象描述信息'

    def
__del__(self):
        print('del方法执行')

    def __new__(cls, *args, **kwargs):#cls 是Dog指向的类对象
        
print(id(cls))
        print('new方法执行')
        return object.__new__(cls)

xtq = Dog()


输出结果:

 

  

__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供

__new__必须要有返回值,返回实例化出来的实例,这点在自己实现

__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例

__init__有一个参数self,就是这个__new__返回的实例__init____new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值

我们可以将类比作制造商,__new__方法就是前期的原材料购买环节,__init__方法就是在有原材料的基础上,加工,初始化商品环节

 

继承:简化代码。生成子类时,先初始化父类

一个类继承另一个类时,它将自动获取另一个类的所有属性和方法;原有的类称为父类(基类),而新类称为子类(派生类)。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。调用父类方法使用:super().父类方法()

class person:
    def __init__(self,name=None,age=None,sex=None):
        self.name=name
        self.age=age
        self.sex=sex
    def __str__(self):
        return "姓名{0},年龄{1},性别{2}".format(self.name,self.age,self.sex)
class Student(person):
    def __init__(self,name=None,age=None,sex=None,score=None):

#继承属性
        # 1.第一种self.属性=当前属性

self.name=name
        # 2.
第二种:父类.属性=当前属性

person.name=name
        # self.age=age
        # self.sex=sex
        
self.score=score
        #第三种:父类._init_()
        #person.__init__(self,name,age,sex)
        #
第四种:super(子类,self)._init_()
        
super(Student,self).__init__(name,age,sex)

    def __str__(self):
        return "姓名{0},年龄{1},性别{2},成绩{3}".format(self.name, self.age, self.sex,self.score)
stu=Student("Lin",18,"男",80)
print(stu)

 

 

多继承:

class A:
    def __init__(self,a=None):
        print(a)
class B:
    def __init__(self,a=None,b=None):
        print(a,b)
class C(A,B):
    def __init__(self,a):
        super(C,self).__init__(a)
c=C(9)

按照继承的顺序,A类中的构造需要1个参数初始化即可。即super函数与父类的继承顺序有关,且初始化父类继承顺序中,最先有__init__()方法的那个。

 

异常的语法:

try:

  语句

except 异常类型 as 别名:

  语句

else

  无异常则执行

finally:

  语句

 

for i in range(1,11):
    if i%3==0:
        print(i)
        break;
else:#else和break一起使用,如果没有执行if语句 会执行else
        
print("没有")

class sexException(Exception):
    pass#Python pass是空语句,是为了保持程序结构的完整性。不做任何事情,一般用做占位语句。

 


排序:

#对象排序
class Car:
    def __init__(self,brand=None,price=None):
        self.brand=brand
        self.price=price
    def __lt__(self, other):
        return self.brand.encode("gbk")<other.brand.encode("gbk")#gbk 编码格式
    
def __str__(self):
        return self.brand+str(self.price)
lists=[Car("英菲",300000),Car("奥迪",250000),Car("奔驰",500000)]
lists.sort()#sort排序
for i in lists:
    print(i)

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/q41881106/article/details/80539082