本文共 4819 字,大约阅读时间需要 16 分钟。
介绍:
今天学习的主要是 面向对象编程的初级概念了解。2016年12月28日
目录:
面向对象编程介绍
类
封装
继承
多态
面向对象编程介绍
objcet-oriented Programming ---OOP
Class 类
一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法Object 对象
一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同Encapsulation 封装
在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法Inheritance 继承
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承Polymorphism 多态
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。类
1 2 3 4 5 6 7 | class Role( object ): #定义一个类, class是定义类的语法,Role是类名,(object)是新式类的写法,必须这样写,以后再讲为什么 def __init__( self ,name,role,weapon,life_value = 100 ,money = 15000 ): #初始化函数,在生成一个角色时要初始化的一些属性就填写在这里 self .name = name self .role = role self .weapon = weapon self .life_value = life_value self .money = money |
封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Role( object ): members = 0 ##人员初始化 类变量,类属性 ac = None ##类公共的 def __init__( self ,name,role,weapon,life_value): ##形式参数,初始化方法 self .name = name ### 实例变量, self自己的 self .role = role self .weapon = weapon self .life_value = life_value Role.members + = 1 ##实例一次 加1 def buy_weapon( self ,weapon): ##方法 print ( "{} is buying {}" . format ( self .name,weapon)) self .weapon = weapon ##role的实例 ,把一个抽象的类变成一个具体的对象的过程 叫做 实例化 p1 = Role( "hequan" , "police" , "B10" , 90 ) t1 = Role( "he1" , "Terrorist" , "B11" , 100 ) t2 = Role( "he2" , "Terrorist" , "B12" , 100 ) t3 = Role( "he2" , "Terrorist" , "B13" , 100 ) p1.buy_weapon( "AK47" ) t1.buy_weapon( "AK48" ) p1.ac = "china" ##赋值,创建了一个变量 p1.ac=china,和 类的ac 没关系了。 t1.ac = "us" Role.ac = "Janpanses" ##修改类的ac Role.weapon = "D99" print (p1.weapon,t1.weapon) print (p1.ac,t1.ac) ##获取的是 p1.ac print (t2.ac,t3.ac) #获取的是 类的ac print (t2.weapon,t3.weapon) print (Role.members) ##总人员 |
继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | class SchoolMember( object ): member_nums = 0 ##人数初始化 def __init__( self ,name,age,sex): self .name = name self .age = age self .sex = sex self .enroll() def enroll( self ): print ( "mSchoolMember {} is enrolled!" . format ( self .name)) SchoolMember.member_nums + = 1 def tell( self ): print ( "hello my name is [{}]" . format ( self .name)) class Teacher(SchoolMember): def __init__( self ,name,age,sex,course,salary): super (Teacher, self ).__init__(name,age,sex) self .course = course self .salary = salary def teaching( self ): print ( "Teacher [{}] is teaching {}." . format ( self .name, self .course)) class Student(SchoolMember): def __init__( self ,name,age,sex,course,tuition): super (Student, self ).__init__(name,age,sex) self .course = course self .tuition = tuition def pay_tution( self ): print ( "cao,student [{}] paying tution {}" . format ( self .name, self .tuition)) t1 = Teacher( "hequan" , 24 , "F" , "PY" , "10000" ) t2 = Teacher( "he" , 25 , "N/A" , "PY" , "10000" ) s1 = Student( "quan" , 25 , "Female" , "python" , 15000 ) s2 = Student( "li" , 26 , "Female" , "python" , 5000 ) print ( "-------------------人数-----------------------" ) print ( "现在注册了:" ,SchoolMember.member_nums , "人" ) print ( "-------------------老师-----------------------" ) t1.tell() t1.teaching() print ( "---------------------学生---------------------" ) s2.tell() s2.pay_tution() mSchoolMember hequan is enrolled! mSchoolMember he is enrolled! mSchoolMember quan is enrolled! mSchoolMember li is enrolled! - - - - - - - - - - - - - - - - - - - 人数 - - - - - - - - - - - - - - - - - - - - - - - 现在注册了: 4 人 - - - - - - - - - - - - - - - - - - - 老师 - - - - - - - - - - - - - - - - - - - - - - - hello my name is [hequan] Teacher [hequan] is teaching PY. - - - - - - - - - - - - - - - - - - - - - 学生 - - - - - - - - - - - - - - - - - - - - - hello my name is [li] cao,student [li] paying tution 5000 |
多态
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Animal: def __init__( self , name): # Constructor of the class self .name = name def talk( self ): # Abstract method, defined by convention only raise NotImplementedError( "Subclass must implement abstract method" ) class Cat(Animal): def talk( self ): return 'Meow!' class Dog(Animal): def talk( self ): return 'Woof! Woof!' def animl_talk(obj): print (obj.talk()) c = Cat( "qwe" ) d = Dog( "asd" ) """ animals = [Cat('Missy'), Dog('Lassie')] for animal in animals: print(animal.name + ': ' + animal.talk()) """ animl_talk(c) animl_talk(d) |