Python是一种面向对象语言,有其三大特性,封装,继承,多态
一.
1.类
具有相同属性和行为特征的对象的集合
class Car:
name="car" #对象
#初始化方法
def __init__(self,brand=None):
self.brand=brand
def printCar(self):
print(self)
2.对象
对象是类的实例,具有类的属性和方法
c=Car("奥迪") #实例化对象
c.printCar() #调用方法
3.创建对象方法
def __new__(cls, *args, **kwargs):
print("创建对象")
return object.__new__(cls,args)
在Python中,在创建对象的时候调用__new__方法,并执行初始化__init__方法
如果,初始化方法有参数,__new__方法return时,args必须也对应加上
4.转化字符串方法(ToString):
输出时,默认调用__str__方法
def __str__(self):
return "这辆%s的品牌是%s"%(self.name,self.brand)
5.自动销毁方法(析构)
在使用del 删除对象或对象使用完毕时,垃圾回收自动销毁对象
def __del__(self):
print("对象销毁了")
二.继承(Python支持多继承)
1.语法: class Student(object)
继承条件下调用父类的属性或方法:
1>父类类名.属性
2>super([父类类名,self]).__init__(self,属性)
3>父类类名.__init__(属性)
2.多继承
class C(A,B)
查找顺序: 参数A写在前,就先从A类中查找属性或方法,如果A中有,就执行A的属性或方法
如果A中没有,就去B中找,执行B的
拓展:
首先,B和C两个类都必须继承自D,A类又继承自B、C,那么执行A的属性或方法会涉及到
广度优先和深度优先
当声明D类时,如果继承Object,子类则为新生类,反之,为经典类
当类为经典类是,按照深度优先
当类为新生类时,按照广度优先
课堂案例:
1.单例模式
#单例
class SingleObject:
__instance=None
def __new__(cls, *args, **kwargs):
if cls.__instance ==None:
cls.__instance=object.__new__(cls)
return cls.__instance
else:
return cls.__instance
a=SingleObject()
b=SingleObject()
print(id(a),id(b))
2.对象排序
#对象排序
class Car:
def __init__(self,brand=None,price=None):
self.brand=brand
self.price=price
def __str__(self):
return "汽车的品牌{0},价格{1}".format(self.brand,self.price)
list=[Car('宝马',3000000),Car('奥迪',4000000),Car('奔驰',3500000),Car('英菲尼迪',100000000)]
list.sort(key=lambda x:x.brand.encode("gbk"))
for i in list:
print(i)
print("==========按价格排序=========")
list.sort(key=lambda x:x.price)
for i in list:
print(i)
key = lambda x: x.price
print(key(list[1]))