• python自动化开发-6-面向对象编程


    面向对象编程

    面向对象的特性

      封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

       继承:面向对象编程 (OOP) 语言的一个主要功能就是“继承”。它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

       多态:允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态是为了实现接口重用!

        例子:      

     1 # Author:RYB
     2 # __*__coding:utf-8__*__
     3 
     4 class Dog(object):
     5     def __init__(self,name,type):
     6         self.name = name
     7         self.type = type
     8     def bark(self):
     9         print("%s I am a dog!" % self.name)
    10     def eat(self,food):
    11         print("%s eating %s" %(self.name,food))
    12 d1=Dog("lucy","zangao")
    13 print(d1.name,d1.type)
    14 d1.bark()
    15 d1.eat("bread")
    View Code

    运行结果:  

    lucy zangao
    lucy I am a dog!
    lucy eating bread

    封装 

      类变量:作为默认公有属性;全局修改,增加新属性。

      实例变量:成员属性,存在自己内存空间里的属性。每个实例独有的属性。构造函数(初始化函数)里的变量都是实例变量;每个实例都可以增加(修改)自己的实例变量。

      公有属性:对应类变量。

      私有属性:__属性名,用来表示私有属性,不允许别人(外部)访问。只能在实例的内部各函数(方法)中调用。

     

    继承

     继承的实现方式主要有两种:1,直接继承;2,组合。

      python支持多继承,一个子类可以继承多个基类(父类),但是一般情况下,一个子类只能有一个基类。

      继承概念的实现方式主要包括两类:实现继承和接口继承。

      继承的功能:1,直接调用父类方法;2,继承父类方法并重构父类方法,先重构,在重构的方法里手动调用父类方法;3,可以定义子类自己的方法;4,析构方法:__del__(self)

       继承例子1:继承+重构    

     1 # Author:RYB
     2 # __*__coding:utf-8__*__
     3 
     4 class SchoolMember(object):
     5     def __init__(self,name,age,sex):
     6         self.name = name
     7         self.age = age
     8         self.sex = sex
     9     def tell(self):
    10         info = '''
    11         ---info of %s---
    12         name:%s
    13         age;%s
    14         sex:%s
    15         '''%(self.name,self.name,self.age,self.sex)
    16         print(info)
    17 
    18 class Teacher(SchoolMember): #继承
    19     def __init__(self,name,age,sex,salary):
    20         SchoolMember.__init__(self,name,age,sex) #继承,调用SchoolMember类的初始化方法实现继承的目的。
    21         self.salary = salary #重构
    22 
    23 t=Teacher("lucy",28,"F",5000)
    24 print(t.name,t.age,t.sex,t.salary)
    View Code

     运行结果:lucy 28 F 5000

        继承例子2:创建学校,老师,学生三个类。    

     1 # Author:RYB
     2 # __*__coding:utf-8__*__
     3 
     4 #学校类
     5 class SchoolMember(object):
     6     def __init__(self,name,age,sex):
     7         self.name = name
     8         self.age = age
     9         self.sex = sex
    10     def tell(self):
    11         info = '''
    12         ---info of %s---
    13         name:%s
    14         age;%s
    15         sex:%s
    16         '''%(self.name,self.name,self.age,self.sex)
    17         print(info)
    18 
    19 #老师类
    20 class Teacher(SchoolMember): #继承
    21     def __init__(self,name,age,sex,salary):
    22         SchoolMember.__init__(self,name,age,sex) #继承,调用SchoolMember类的初始化函数(构造函数)实现继承的目的。
    23         self.salary = salary #重构
    24     def teaching(self,course):
    25         print("%s is teaching %s"%(self.name,self.course))
    26 
    27 #学生类
    28 class Student(SchoolMember):
    29     def __init__(self,name,age,sex,grade):
    30         SchoolMember.__init__(self,name,age,sex)
    31         self.grade = grade
    32     def pay_tuition(self,total):
    33         self.tuition = total
    34         print("student %s has paid tuition fee total %s"%(self.name,total))
    35 
    36 t=Teacher("lucy",28,"F",5000)
    37 s=Student("lily",25,"M","p16")
    38 s2=Student("lilei",35,"M","p17")
    39 
    40 t.tell()
    41 s.tell()
    42 s2.tell()
    View Code

    运行结果:

    ---info of lucy---
    name:lucy
    age;28
    sex:F

    ---info of lily---
    name:lily
    age;25
    sex:M

    ---info of lilei---
    name:lilei
    age;35
    sex:M

        继承例子3:      

     1 # Author:RYB
     2 # __*__coding:utf-8__*__
     3 
     4 #学校类
     5 class SchoolMember(object):
     6     def __init__(self,name,age,sex):
     7         self.name = name
     8         self.age = age
     9         self.sex = sex
    10     def tell(self):
    11         info = '''
    12         ---info of %s---
    13         name:%s
    14         age;%s
    15         sex:%s
    16         '''%(self.name,self.name,self.age,self.sex)
    17         print(info)
    18 
    19 #老师类
    20 class Teacher(SchoolMember): #继承
    21     def __init__(self,name,age,sex,salary):
    22         SchoolMember.__init__(self,name,age,sex) #继承,调用SchoolMember类的初始化函数(构造函数)实现继承的目的。
    23         self.salary = salary #重构
    24     def teaching(self,course):
    25         print("%s is teaching %s"%(self.name,course))
    26 
    27 #学生类
    28 class Student(SchoolMember):
    29     def __init__(self,name,age,sex,grade):
    30         SchoolMember.__init__(self,name,age,sex)
    31         self.grade = grade
    32     def pay_tuition(self,total):
    33         self.tuition = total
    34         print("student %s has paid tuition fee total %s"%(self.name,total))
    35 
    36 t=Teacher("lucy",28,"F",5000)
    37 s=Student("lily",25,"M","p16")
    38 s2=Student("lilei",35,"M","p17")
    39 
    40 t.teaching("python")
    41 s.pay_tuition(1000)
    View Code

    运行结果:

    lucy is teaching python
    student lily has paid tuition fee total 1000

        继承例子4: 统计新学校成员(实例)的数量,如果成员被开除了,统计还剩多少成员。     

     1 # Author:RYB
     2 # __*__coding:utf-8__*__
     3 
     4 #学校类
     5 class SchoolMember(object):
     6     members=0
     7     def __init__(self,name,age,sex):
     8         self.name = name
     9         self.age = age
    10         self.sex = sex
    11         SchoolMember.members+=1 #统计新学校成员数量
    12         print("初始化了一个新学校成员",self.name)
    13     def tell(self):
    14         info = '''
    15         ---info of %s---
    16         name:%s
    17         age;%s
    18         sex:%s
    19         '''%(self.name,self.name,self.age,self.sex)
    20         print(info)
    21     def __del__(self): #析构方法,实例销毁时自动执行的事情(动作)。
    22         print("%s被开除了" %self.name)
    23         SchoolMember.members-=1
    24 
    25 #老师类
    26 class Teacher(SchoolMember): #继承
    27     def __init__(self,name,age,sex,salary):
    28         SchoolMember.__init__(self,name,age,sex) #继承,调用SchoolMember类的初始化函数(构造函数)实现继承的目的。
    29         self.salary = salary #重构
    30     def teaching(self,course):
    31         print("%s is teaching %s"%(self.name,course))
    32 
    33 #学生类
    34 class Student(SchoolMember):
    35     def __init__(self,name,age,sex,grade):
    36         SchoolMember.__init__(self,name,age,sex)
    37         self.grade = grade
    38     def pay_tuition(self,total):
    39         self.tuition = total
    40         print("student %s has paid tuition fee total %s"%(self.name,total))
    41 
    42 t=Teacher("lucy",28,"F",5000)
    43 s=Student("lily",25,"M","p16")
    44 s2=Student("lilei",35,"M","p17")
    45 s3=Student("lili",15,"M","p18")
    46 del s3
    47 del s2
    48 
    49 t.teaching("python")
    50 s.pay_tuition(1000)
    51 print(SchoolMember.members) #统计新学校成员数量
    View Code

    运行结果:

    初始化了一个新学校成员 lucy
    初始化了一个新学校成员 lily
    初始化了一个新学校成员 lilei
    初始化了一个新学校成员 lili
    lili被开除了
    lilei被开除了
    lucy is teaching python
    student lily has paid tuition fee total 1000
    2
    lucy被开除了
    lily被开除了

      

     

  • 相关阅读:
    [转]为什么阿里巴巴要禁用Executors创建线程池?
    支付宝的架构到底有多牛逼!
    [转] Java Agent使用详解
    Spring Boot必备技能之Starter自定义
    面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
    Docker 容器化应用
    Python Click 学习笔记
    MySQL优化(7):其他注意事项
    MySQL优化(6):分表和读写分离
    MySQL优化(5):分区
  • 原文地址:https://www.cnblogs.com/renyongbin/p/6480377.html
Copyright © 2020-2023  润新知