zoukankan      html  css  js  c++  java
  • 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被开除了

      

     

  • 相关阅读:
    Begin Example with Override Encoded SOAP XML Serialization
    State Machine Terminology
    How to: Specify an Alternate Element Name for an XML Stream
    How to: Publish Metadata for a WCF Service.(What is the Metadata Exchange Endpoint purpose.)
    Beginning Guide With Controlling XML Serialization Using Attributes(XmlSerializaiton of Array)
    Workflow 4.0 Hosting Extensions
    What can we do in the CacheMetaData Method of Activity
    How and Why to use the System.servicemodel.MessageParameterAttribute in WCF
    How to: Begin Sample with Serialization and Deserialization an Object
    A Test WCF Service without anything of config.
  • 原文地址:https://www.cnblogs.com/renyongbin/p/6480377.html
Copyright © 2011-2022 走看看