python 中的类
python 中的类
内容概述
类的概念:
类是一组方法与属性的抽象集。
属性
实例变量(每个实例内存中)
类变量(类内存中)
私有属性 __var
方法
构造方法
析构函数(默认就有,代码为空,写了则相当于重构它)
其他方法
对象(object):类的实例(实例化一个类之后得到的对象)
类的特性:
封装:
把一些功能的实现细节不对外暴露
继承:
继承顺序:(先覆盖、再继承、再添加)
继承:代码复用
继承方式:
单继承
多继承
2.7 经典类 深度优先
新式类 广度优先
3.x 均广度优先
多态:
接口重用(一种接口,多种实现)
---
1创建一个类:
------
class 关键字,SchoolMember 类名(object) 新式类写法
class SchoolMember(object):
member = 0 #类变量
def __init__(self,name,age,sex):
self.name = name #实例属性
self.age = age
self.__sex = sex #定义私有属性
self.register()
def print_info(self):
print("---info %s start------"%self.name)
for k,v in self.__dict__.items():
print("\t",k,v)
print("---info %s end------" % self.name)
def print_sex(self):
print("%s is %s"%(self.name,self.__sex))
def register(self):
SchoolMember.member +=1
print("now the member is %s" % SchoolMember.member)
def __del__(self):
'''析构函数'''
print("del the %s"%self.name)
SchoolMember.member -=1
print("now the member is %s" % SchoolMember.member)
t1 = Teacher('aa',30,'M',3000,'py') #生成对象
t1.print_sex() #私有属性在类外部无法直接进行访问,只能通过类方法去访问。
类的特性:
-----
1、封装:
---
封装是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其含义是其他程序无法调用。
2、继承:
---
2.1、单继承
class Animal:
def __init__(self,name,voice=None): # voice初始化默认为None
self.name = name
self.voice = voice
def Say(self):
print(self.voice)
def Run(self):
pass # 空操作语句(不做任何操作)
class CDog(Animal): # 继承类Animal
# def __init__(self,name,voice):
# super(CDog,self).__init__(name,voice)
def SetVoice(self,voice): # 子类增加函数SetVoice
self.voice = voice
def Run(self): # 子类重载函数Run
print('Running')
bobo = CDog('ala')
bobo.SetVoice('wang')
bobo.Say()
2.2、多继承 新式类:
class A(object):
def __init__(self):
pass
def f(self):
print('A')
class B(A):
def __init__(self):
pass
# def f(self):
# print('B')
class C(A):
def __init__(self):
pass
def f(self):
print('C')
class D(B,C):
def __init__(self):
super(D, self).__init__()
# def f(self):
# print('D')
c = D()
c.f()
print(D.__mro__)
输出信息:
C
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
新式类的继承方式:广度优先,继承先左后右的方式。
3.6 版本的多重继承方式都是广度优先。
2.7 版本的新诗类继承方式也是广度优先的原则。
经典类的方式:
class A:
def __init__(self):
pass
def f(self):
print('A')
class B(A):
def __init__(self):
pass
# def f(self):
# print('B')
class C(A):
def __init__(self):
pass
def f(self):
print('C')
class D(B,C):
def __init__(self):
#super(D, self).__init__()
B.__init__(self)
C.__init__(self)
# def f(self):
# print('D')
c = D()
c.f()
#print(D.__mro__)
2.7 版本 输出 A ,经典类是深度优先。
3.6版本 输出 C ,广度优先原则