博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python--day6--面向对象学习
阅读量:6423 次
发布时间:2019-06-23

本文共 4819 字,大约阅读时间需要 16 分钟。

介绍:

今天学习的主要是 面向对象编程的初级概念了解。2016年12月28日 

目录:

  1. 面向对象编程介绍

  • 封装

  • 继承

  • 多态


面向对象编程介绍

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())
= 
Cat(
"qwe"
)
= 
Dog(
"asd"
)
"""
animals = [Cat('Missy'),
           
Dog('Lassie')]
for animal in animals:
    
print(animal.name + ': ' + animal.talk())
"""
animl_talk(c)
animl_talk(d)
本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1886861,如需转载请自行联系原作者
你可能感兴趣的文章
精品德国软件 UltraShredder 文件粉碎机
查看>>
PANDAS 数据合并与重塑(join/merge篇)
查看>>
文件时间信息在测试中的应用
查看>>
直播疑难杂症排查(8)— 播放杂音、噪音、回声问题
查看>>
如何写gdb命令脚本
查看>>
Android ListView展示不同的布局
查看>>
iOS宏(自己使用,持续更新)
查看>>
手把手玩转win8开发系列课程(3)
查看>>
NGINX引入线程池 性能提升9倍
查看>>
《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件
查看>>
linux下mongodb定时备份指定的集合
查看>>
oVirt JBAS server start failed, ajp proxy cann't server correct. ovirt-engine URL cann't open
查看>>
CDP WebConsole上线公告
查看>>
ubuntu下安装摄像头应用程序xawtv
查看>>
PostgreSQL 如何比较两个表的定义是否一致
查看>>
Ambari安装Hadoop集群
查看>>
WCF学习之旅—基于ServiceDebug的异常处理(十七)
查看>>
CLREX
查看>>
再也不用担心this指向的问题了
查看>>
PHP那些事儿
查看>>