python面向对象
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
实例变量:定义在方法中的变量,只作用于当前实例的类。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如, 有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
面向对象的三大特征:封装、继承、多态
继承:子类继承父类,子类可以使用父类的属性和方法,简化代码.
当生成子类对象时,先初始化父类对象,所以如果父类有__init__()方法,并且有属性时,要通过子类的构造赋值
一个类可以有多个子类
在子类中,调用父类的属性时,在__init__()方法中使用
父类.属性,或self.属性或父类.__init__(self,参数)或super(父类,self).__init__(参数)四种方法给父类传参
调用父类方法时:super().父类方法()
class Person: def __init__(self,name=None,age=None,sex=None): self.name=name #1 Person.name=name self.age=age self.sex=sex Person.__init__(self,name,age,sex) super(Student, self).__init__(name, age, 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): self.name = name #第一种方法 #Person.name=name #第二种方法 self.age = age self.sex = sex #Person.__init__(self,name,age,sex) 第三种方法 #super(Student, self).__init__(name,age,sex) 第四种方法 self.score=score def __str__(self): return"我的姓名:{0},我的年龄:{1},我的性别:{2},成绩{3}".format(self.name,self.age,self.sex,self.score) stu=Student("Mary",19,'female',90) print(stu)
结果:我的姓名:Mary,我的年龄:19,我的性别:female,成绩90
类继承Object
私有属性与方法不能被外部调用。
两个下划线开头,声明该方法为私有方法,只能在类的内部调用,不能在类地外部调用。
单例模式:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
class SingleTone: __isinstance=None def __new__(cls): if cls.__isinstance==None: cls.__isinstance=object.__new__(cls) return cls.__isinstance else: return cls.__isinstance s=SingleTone() ss=SingleTone() print(id(s),id(ss))
对象列表排序:重写lt或gt方法
class Car: def __init__(self,brand=None,price=None): self.brand=brand self.price=price def __gt__(self,other): #支持中文排序:用encode()进行编码 return self.brand.encode("gbk")<other.brand.encode("gbk") #return self.price<other.price def __str__(self): return self.brand+str(self.price) lists=[Car("柯尼塞格",8000000),Car("阿尔法罗密欧",1400000),Car("宾利",3000000)] lists.sort() for i in lists: print(i)
异常:
try:
语句
except 异常类型 as 别名:
语句
else:
无异常则执行
finally:
语句
finally的语句无论异常与否都将执行