主に言語をよりよく学ぶための演習として、PHP で書いたものを Python に移植しようとしています。問題のコードは SWF パーサーです。PHP では、すべてのデータ構造をクラスとして宣言しています。私はPythonで同じことをしようとしていますが、クラス変数を宣言する明示的な方法はないようです. したがって、次のような多くのクラスになります。
class SWFRGBA(object):
red = 0
green = 0
blue = 0
alpha = 0
Pythoners は実際にこのようなことを書きますか?
[編集]
問題を説明するために、実際のコードを投稿させてください。以下の関数は、SWF ファイル内のベクトル形状を読み取ります。readUB()、readSB() は、特定の数のビットを読み取り、符号なしまたは符号付きと解釈します。場合によっては、特定のフィールドに必要なビット数自体がビットストリームから読み取られます。3 つのタイプのレコードが表示される可能性があります: 直線エッジ、二次曲線、またはスタイルの変更。スタイル変更レコードは、ペン位置の移動、線スタイル インデックスの変更、2 つの塗りつぶしスタイル インデックスのいずれかの変更、またはスタイル配列の置換を行う可能性があります。
protected function readShapeRecords($numFillBits, $numLineBits, $version, &$bytesAvailable) {
$records = array();
while($bytesAvailable) {
if($this->readUB(1, $bytesAvailable)) {
// edge
if($this->readUB(1, $bytesAvailable)) {
// straight
$line = new SWFStraightEdge;
$line->numBits = $this->readUB(4, $bytesAvailable) + 2;
if($this->readUB(1, $bytesAvailable)) {
// general line
$line->deltaX = $this->readSB($line->numBits, $bytesAvailable);
$line->deltaY = $this->readSB($line->numBits, $bytesAvailable);
} else {
if($this->readUB(1, $bytesAvailable)) {
// vertical
$line->deltaX = 0;
$line->deltaY = $this->readSB($line->numBits, $bytesAvailable);
} else {
// horizontal
$line->deltaX = $this->readSB($line->numBits, $bytesAvailable);
$line->deltaY = 0;
}
}
$records[] = $line;
} else {
// curve
$curve = new SWFQuadraticCurve;
$curve->numBits = $this->readUB(4, $bytesAvailable) + 2;
$curve->controlDeltaX = $this->readSB($curve->numBits, $bytesAvailable);
$curve->controlDeltaY = $this->readSB($curve->numBits, $bytesAvailable);
$curve->anchorDeltaX = $this->readSB($curve->numBits, $bytesAvailable);
$curve->anchorDeltaY = $this->readSB($curve->numBits, $bytesAvailable);
$records[] = $curve;
}
} else {
$flags = $this->readUB(5, $bytesAvailable);
if(!$flags) {
break;
} else {
// style change
$change = new SWFStyleChange;
if($flags & 0x01) {
$change->numMoveBits = $this->readSB(5, $bytesAvailable);
$change->moveDeltaX = $this->readSB($change->numMoveBits, $bytesAvailable);
$change->moveDeltaY = $this->readSB($change->numMoveBits, $bytesAvailable);
}
if($flags & 0x02) {
$change->fillStyle0 = $this->readUB($numFillBits, $bytesAvailable);
}
if($flags & 0x04) {
$change->fillStyle1 = $this->readUB($numFillBits, $bytesAvailable);
}
if($flags & 0x08) {
$change->lineStyle = $this->readUB($numLineBits, $bytesAvailable);
}
if($flags & 0x10) {
$change->newFillStyles = $this->readFillStyles($version, $bytesAvailable);
$change->newLineStyles = $this->readLineStyles($version, $bytesAvailable);
$change->numFillBits = $numFillBits = $this->readUB(4, $bytesAvailable);
$change->numLineBits = $numLineBits = $this->readUB(4, $bytesAvailable);
}
$records[] = $change;
}
}
}
$this->alignToByte();
return $records;
}