- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
- 多态:让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。
创建类:
class classname:
#类体。类成员,方法,数据属性组成
self代表类的实例,参数名称
__init__ 方法接收参数
在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
使用点号 . 来访问对象的属性
- getattr(obj, name[, default]) : 访问对象的属性。
- hasattr(obj,name) : 检查是否存在一个属性。
- setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
- delattr(obj, name) : 删除属性。
继承语法:
class 派生类名(基类名) ...
如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。
如果重写了__init__ 时,要继承父类的构造方法,可以使用 super 关键字:
super(子类,self).__init__(参数1,参数2,....)
情况一:子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。
情况二:子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的__init__()的方法。
情况三:子类重写__init__()方法又需要调用父类的方法:使用super关键词:
super(子类,self).__init__(参数1,参数2,....) class Son(Father): def __init__(self, name): super(Son, self).__init__(name)
多继承:
class SubClassName (ParentClass1[, ParentClass2, ...]): ...
Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性
运算符重载:
1 | __init__ ( self [,args...] ) 构造函数 简单的调用方法: obj = className(args) |
2 | __del__( self ) 析构方法, 删除一个对象 简单的调用方法 : del obj |
3 | __repr__( self ) 转化为供解释器读取的形式 简单的调用方法 : repr(obj) |
4 | __str__( self ) 用于将值转化为适于人阅读的形式 简单的调用方法 : str(obj) |
5 | __cmp__ ( self, x ) 对象比较 简单的调用方法 : cmp(obj, x) |
实例:
class vehicle:#定义基类
def __init__(self,type,weight,drive):#__init__ 方法接收各种参数,车型type,重量weight
self.type=type #赋值type
self.weight=weight#赋值weight
self.drive=drive
def display(self): #定义输出类。输出参数各值
print ("车型:",self.type,"重量:",self.weight,"t","驾驶情况:",self.drive)
class bus(vehicle):#子类继承父类构造函数
def display(self):#定义输出类。输出参数各值,重写输出函数
print ("名字:",self.type," 重量:",self.weight,"t"," 驾驶情况:",self.drive)
car1=vehicle("汽车",1.5,"无人驾驶")#创建vehicle类的第一个对象汽车
car2=vehicle("客车",2.5,"无人驾驶")#创建vehicle类的第二个对象客车
car1.display()#输出属性
car2.display()#输出属性
bus1=bus("东风路28路公交车", 2.5,"无人驾驶")#创建bus类的第一个对象汽车
bus1.display()#输出属性
class vehicle:#定义基类
def __init__(self,weight,drive):#__init__ 方法接收各种参数,车型type,重量weight
self.weight=weight#赋值weight
self.drive=drive#赋值drive
def display(self): #定义输出类。输出参数各值
print ("重量:",self.weight,"t","驾驶情况:",self.drive)
class bus1(vehicle):#多态具有不同功能的函数可以使用相同的函数名,定义bus1继承基类
def __init__(self,weight,drive,type):
super().__init__(weight,drive) #super继承父类的构造方法,以下如同
self.type=type#定义新属性
def display(self):
print ("名字:",self.type," 重量:",self.weight,"t"," 驾驶情况:",self.drive)
class bus2(vehicle):#定义bus2继承基类
def __init__(self,weight,drive,type):
super().__init__(weight,drive)
self.type=type
def display(self):
print ("名字2:",self.type,"重量:",self.weight,"t"," 驾驶情况:",self.drive)
class bus3(vehicle):#定义bus3继承基类
def __init__(self,weight,drive,type):
super().__init__(weight,drive)
self.type=type
def display(self):
print ("名字3:",self.type,"重量:",self.weight,"t"," 驾驶情况:",self.drive)
bus4=bus1(2.5,"无人驾驶","28路公交车")#创建bus1类的第一个对象
bus4.display()
bus5=bus2(3.5,"人为驾驶","906路公交车")#创建bus2类的第一个对象
bus5.display()
bus6=bus3(4.5,"人为驾驶","B32路公交车")#创建bus3类的第一个对象
bus6.display()
学习2:Python面向对象提升与收发邮件_哔哩哔哩_bilibili
父类中方法名相同,默认调用括号中排前面的父类中的方法
Python中调用另外一个文件夹中的内容:
1、同一文件目录下
在b.py文件中用下面两条语句即可完成对a.py文件中func( )函数的调用
import a #引用模块 a.func( )
或者是
import a#引用模块 from a import func #引用模块中的函数 func() #这里调用函数就不需要加上模块名的前缀了
2、不同文件目录下
若不在同一目录,python查找不到,必须进行查找路径的设置,将模块所在的文件夹加入系统查找路径
import sys sys.path.append(‘a.py所在的路径’) import a a.func()
多继承:
class SubclassName(BaseClass1, BaseClass2, BaseClass3, ...):
pass
多态:一种事物的多种形态
对象属性的优先级高于类属性
类属性:类名调用
动态的给对象添加对象属性
千万不要将对象属性与类属性重名,因为对象属性会屏蔽类属性,但当删除对象属性后,在使用又能使用类属性