'''面向对象扫盲'''
#class info: #经典类的定义
class QiongB(object): #新式类的定义,object是基类,所有类继承object类
nation = 'zh' #类变量,相比实例变量,在实例化对象的过程中不需要开辟额外的内存。在大批量调用相同变量的时候类变量会更加高效。
def __init__(self,name,age,job,salary): #__init__为构造函数,对象首先要调用__init__,self是每个方法都会带的参数,哪个对象调用这个方法,self就代表哪个对象。
self.Name = name #实例变量。如果实例化的对象变量名是P1,就等价于P1.name = name。如果实例变量和类变量同名,对象首先调用实例变量,再调用类变量。
self.Age = age
self.Job = job
self.Salary = salary
self.__Alias = '穷B' #__xxx的方法或变量为私有属性,只能在的类的内部调用,在类外无法访问
def print_info(self):
info = '''
name : %s
age : %d
job : %s
salary : %d
nation : %s
alias : %s
''' %(self.Name,self.Age,self.Job,self.Salary,self.nation,self.__Alias)
print(info)
def __del__(self): #__del__为析构函数,在对象被释放的时候进行一些收尾工作,例如关闭网络连接、数据库连接、文件等。不需要参数。
print('%s 穷挂了'% self.Name)
# P1 = QiongB('yufo',24,'IT',3000)
# #P1.__alias #调用私有属性会报错
# P1.print_info() #可以正常打印私有属性__alias,在程序退出后对象释放,调用析构函数__del__
#
# class XiaoQiongB(QiongB): #定义QiongB的子类,类的继承。子类XiaoQiongB会继承父类的所有方法。
# def __init__(self,name,age,job,salary):
# super(XiaoQiongB, self).__init__(name,age,job,salary) #继承父类构造方法的变量
# self.Status = '也很穷' #新增自己构造方法的变量
# def print_info(self): #子类的方法和父类重名的话会改写父类的方法
# print('穷B %s 虽然很穷但是好在苟住了\n'%self.Name)
# print('但是他' + self.Status)
#
# P3 = XiaoQiongB('yufo2',22,'IT',2900)
# P3.print_info()
#P2 = XiaoQiongB('yufo2',22,'IT',2900) #调用了父类的__init__
#P2.print_info() #调用了子类重写的方法,释放对象后调用了父类的__del__
class Makefriends(object):
def Makefriends(self,name,Tuhao):
print('穷B %s 和土豪 %s 成为了朋友\n'%(name,Tuhao))
class XiaoQiongB(QiongB,Makefriends): #多重继承,实例化的时候广度优先匹配第一个__init__
def __init__(self,name,age,job,salary):
super(XiaoQiongB, self).__init__(name,age,job,salary) #继承父类构造方法的变量
self.Status = '也很穷' #新增自己构造方法的变量
def print_info(self): #子类的方法和父类重名的话会改写父类的方法
print('穷B %s 虽然很穷但是好在苟住了\n'%self.Name)
print('但是他' + self.Status)
Tuhao1 = '富豪萝莉'
QiongB1 = XiaoQiongB('yufo3',22,'IT','2900')
QiongB1.Makefriends('Yufo3',Tuhao1)
暂无评论