我的python之路【第六章】面向对象

 面向对象

面向对象基本概念:

'''
面向对象中:函数叫做方法
类变量:
    作为默认公有属性
    全局修改或增加新属性
实例变量(成员属性)
    每个实例存在自己内存空间里的属性
公有属性==类变量

私有属性
    __sex   代表私有属性,仅能在内部各函数(方法)中调用
    隐藏一些功能的实现细节,只给外部暴露调用接口。

继承:
    1.直接调用父类方法
    2.继承父类方法并重构父类方法,先重构,在重构的方法里手动调用父类方法   重构:__init__
    3.可以定义子类自己的方法
    4.析构方法  __del__
'''
View Code

实现一个简单的类

class Dog(object):
    age=22  #类变量,存在类的内存地址里,可以被所有实例共享引用
    def __init__(self,name,type):   #初始化函数(构造函数)
        self.name=name
        self.type=type
    def balk(self):
        print('%s is a dog'%self.name)

d=Dog('贺磊','牧羊犬')
print(d.name,d.type)
d.balk()

类变量

#类变量
class People():
    def __init__(self,name,age,job):
        self.name=name
        self.age=age
        self.job=job
p=People("helei",'22','it')
People.fuli='da bao jian'   #添加一个类的变量     #全局增加新属性
print(p.fuli)
p.hotjob='aaa'  #添加一个实例变量
print(p.hotjob)

实例变量:

#实例变量(成员属性)
class People():
    fuli='dabaojian'    #类变量,实例生成后,会生成引用关系,但是内存还是调用类的内存
    def __init__(self,name,age,job,sex):
        self.name=name  #实例变量,生成实例后存在于实例的内存空间
        self.age=age
        self.job=job
        self.__sex=sex  #私有属性,只能内部各方法中调用
    def show(self):
        print('my name is %s',self.name)
    def get_sex(self):
        print(self.__sex)
p1=People('helei','22','dd','F')
#print(p1.__sex)    #这里会报错,因为私有属性不能在外部调用,只能通过内部方法调用
p1.get_sex()#可以通过内部的方法调用

多继承的基本演示

#多继承演示
class Course(object):   #多继承时候,不应该都写构造方法
    course_name='Python 自动化'
    period='7m'
    outline='www.baidu.com'
    print('in course')      #演示继承顺序
class SchoolMember(object):
    member=0                            #统计学校注册成员
    print('in SchoolMember')          #演示继承顺序
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        SchoolMember.member+=1  #统计所有的学校成员
        print('初始化了一个新学校成员',self.name)
    def tell(self):
        info = '''
        -----info of {name} -----
        name:{name}
        age:{age}
        sex:{sex}
        '''.format(name=self.name,age=self.age ,sex=self.sex)
        print(info)
    def __del__(self):                  #析构方法   #实例销毁时自动执行
            print("%s被开除了"%self.name) #
            SchoolMember.member -= 1
class Teacher(SchoolMember):                #继承父类
    def __init__(self,name,age,sex,salary):         #这里相当于重构了父类的构造方法
        SchoolMember.__init__(self,name,age,sex)
        # self.name=name
        # self.age=age
        # self.sex=sex
        self.salary=salary
    def teaching(self,course):
        print('%s is teaching %s'%(self.name,course))
#class Student(SchoolMember):
class Student(SchoolMember,Course):                 #演示多继承,继承顺序先右后左,两个父类中都有变量时,会产生重新赋值。
    def __init__(self,name,age,sex,grade):
        SchoolMember.__init__(self,name,age,sex,)
        self.grade=grade
    def pay_tuition(self,amount):
        self.paid_tuition=amount
        print('student %s has paid tution amount %s '%(self.name,amount))

#t=Teacher('Alex',22,'F',3000)
s=Student('helei',24,'F','pys16')
# s2=Student('Yanshuai',23,'F','pys33')
# s3=Student('Nining',22,'M','pys16')
# print(SchoolMember.member)  #此时创建了4个实例
#
# del s3
# print(SchoolMember.member)  #此时删除了一个实例
# print(s.course_name)

# t=Teacher("alex",22,'F',30000)
# print(t.name)
# print(t.age)
# print(t.sex)
# print(t.salary)
# t.tell()
# t.teaching('python')
View Code

 

posted @ 2017-03-03 19:13  saynobody  阅读(215)  评论(0编辑  收藏  举报