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 ,广度优先原则

猜你喜欢

转载自www.cnblogs.com/liuzh6/p/9090174.html