Wie @esdd in ihrem Kommentar schon richtig bemerkt hat, ist Option `landscape` bei KOMA-Script gar nicht eine Option der Klasse, sondern eine Option des Pakets `typearea`. Dieses Paket wird von allen KOMA-Script-Klassen geladen, um Satzspiegel- und Randeinstellungen vorzunehmen. Die Optionen, die man bei `\documentclass` angibt, sind wiederum nicht nur Optionen für die Klasse, sondern *globale* Optionen. Diese globalen Optionen werden bei `\ProcessOptions` und `\ProcessOptions*` in einem Paket nach der Abarbeitung der Optionen, die nur für das Paket bestimmt waren, abgearbeitet, soweit das Paket explizit eine gleichnamige Option deklariert hat. In einem Paket werden globale Optionen dagegen nicht an `\DeclareOption*` weitergereicht.
Will man nun also, dass eine Option aus `\documentclass` weder für die Unterklasse noch für eines der geladenen Pakete sichtbar ist, so muss man sie aus der Liste der globalen Optionen entfernen. Das kann man beispielsweise so machen:
\RequirePackage{filecontents}
\begin{filecontents}{testklasse.cls}
\ProvidesClass{testklasse}[2014/04/25 demonstation objekt only]
\providecommand*{\removefromglobaloptions}[1]{% #1 ist die unerwünschte Option
\begingroup
\let\reserved@a\@classoptionslist% \reserved@a bekommt den Inhalt der globalen Optionen
\let\@classoptionslist\@empty% die globalen Optionen werden gelöscht
\edef\reserved@b{#1}%
\expandafter\@for\expandafter\reserved@a\expandafter:\expandafter=%
\reserved@a\do{% jede ehemals globale Option
\ifx\reserved@a\reserved@b\else% die nicht der unerwünschten Option entspricht
% wieder der Liste der globalen Optionen hinzufügen:
\ifx\@classoptionslist\@empty\global\let\@classoptionslist\reserved@a
\else\expandafter\g@addto@macro\expandafter\@classoptionslist
\expandafter{\expandafter,\reserved@a}\fi
\fi
}%
\endgroup
}
\DeclareOption{twoside}{\typeout{Option `twoside' used.}\removefromglobaloptions{twoside}}
\DeclareOption{titlepage}{\typeout{Option `titlepage' used.}\removefromglobaloptions{titlepage}}
\DeclareOption{landscape}{\typeout{Option `landscape' used.}\removefromglobaloptions{landscape}}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
\ProcessOptions\relax
\LoadClass{scrartcl}
\end{filecontents}
\documentclass[twoside,titlepage,landscape,ngerman]{testklasse}
\usepackage{babel}
\usepackage{mwe}
\begin{document}
\title{Test}
\author{Me}
\maketitle
\tableofcontents
\Blinddocument
\end{document}
Würde man nun später im Dokument beispielsweise `geometry` laden, so wären `twoside` und `landscape` auch für dieses Paket nicht existent. Soll das jedoch nur für Pakete gelten, die `scrartcl` automatisch lädt, so müsste man die Liste der globalen Optionen zusätzlich sichern und später wiederherstellen:
RequirePackage{filecontents}
\RequirePackage{filecontents}
\begin{filecontents}{testklasse.cls}
\ProvidesClass{testklasse}[2014/04/25 demonstation objekt only]
\providecommand*{\removefromglobaloptions}[1]{%
\begingroup
\let\reserved@a\@classoptionslist
\let\@classoptionslist\@empty
\edef\reserved@b{#1}%
\expandafter\@for\expandafter\reserved@a\expandafter:\expandafter=%
\reserved@a\do{%
\ifx\reserved@a\reserved@b\else
\ifx\@classoptionslist\@empty\global\let\@classoptionslist\reserved@a
\else\expandafter\g@addto@macro\expandafter\@classoptionslist
\expandafter{\expandafter,\reserved@a}\fi
\fi
}%
\endgroup
}
\let\all@classoptionslist\@classoptionslist
\DeclareOption{twoside}{\typeout{Option `twoside' used.}\removefromglobaloptions{twoside}}
\DeclareOption{titlepage}{\typeout{Option `titlepage' used.}\removefromglobaloptions{titlepage}}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
\ProcessOptions\relax
\LoadClass{scrartcl}
\let\@classoptionslist\all@classoptionslist
\end{filecontents}
\documentclass[twoside,titlepage,ngerman]{testklasse}
\usepackage{babel}
\usepackage{geometry}
\usepackage{mwe}
\begin{document}
\title{Test}
\author{Me}
\maketitle
\tableofcontents
\Blinddocument
\end{document}
**Aber:** Man kann auf diese Weise nicht verhindern, dass jemand per `\PassOptionsToClass{titlepage}{scrartcl}` doch eine Titelseite einschaltet oder per `\PassOptionsToPackage{twoside,landscape}{typearea}` doch wieder doppelseitiges Querformat aktiviert. Man müsste dazu zusätzlich die Optionen aus den Listen der Klassenoptionen von `scrartcl` und der Paketoptionen von `typearea` vor dem Laden der Klasse bzw. des Pakets entfernen.
BTW: Ich bin mir bewusst, dass es für das Entfernen von Optionen aus der aktuellen Liste schnelleren Code gibt. Obiger Code erscheint mir aber nicht nur recht zuverlässig, sondern auch gerade noch verständlich. Irgendwelche Pattern-Match-Argument-Tricks sind das hingegen nicht. Deshalb habe ich diesen Weg gewählt.