2016-04-27 11 views
0

Pythonのための優雅な同等であるもの:SO純粋主義者のためののPython、幹:クラス

class ControllerError(Exception): 


class OperationFailed(ControllerError): 

    def __init__(self, code = None, message = None): 
    super(ControllerError, self).__init__(message) 
    self.code = code 
    self.message = message 

、これまでの私の試み:

Class ControllerError : System.Exception 
{ 

} 


Class OperationFailed : ControllerError 
{ 
    $Code 
    $Message 

    OperationFailed ($Code, $Message) 
    { 
     $this.Code = $Code 
     $this.Message = $Message 
    } 
} 

答えて

1

あなたが持っているものと間違って何?これはPowerShellの5.0では正常に動作します:

Class ControllerError : System.Exception 
{ 

} 


Class OperationFailed : ControllerError 
{ 
    $Code 
    $Message 

    OperationFailed ($Code, $Message) 
    { 
     $this.Code = $Code 
     $this.Message = $Message 
    } 
} 

$o = [operationfailed]::new("500","Internal server errror") 

$o.Code 
500 

$o.Message 
Internal server errror 

$o | Get-Member | Select Name, MemberType 

Name    MemberType 
----    ---------- 
Equals    Method 
GetBaseException  Method 
GetHashCode   Method 
GetObjectData  Method 
GetType    Method 
ToString    Method 
Code    Property 
Data    Property 
HelpLink   Property 
HResult   Property 
InnerException  Property 
Message   Property 
Source    Property 
StackTrace   Property 
TargetSite   Property 

$o.gettype() 

IsPublic IsSerial Name   BaseType  
-------- -------- ----   --------  
True  False OperationFailed ControllerError 

$o.gettype().BaseType 

IsPublic IsSerial Name   BaseType   
-------- -------- ----   --------   
True  False ControllerError System.Exception 

あなたはおそらく、彼らはSystem.Objectにしたくないと私は$Code$Messageのためのタイプを指定することをお勧めします。例:

Class OperationFailed : ControllerError 
{ 
    [string]$Code 
    [string]$Message 

    OperationFailed ([string]$Code, [string]$Message) 
    { 
     $this.Code = $Code 
     $this.Message = $Message 
    } 
} 

あなたが本当に基本コンストラクタを使用したい(またはあなたがPowerShellの< 5.0を使用したい)場合は、あなたはC#とAdd-Type

$def = @" 
    public class ControllerError : System.Exception 
    { 
     public ControllerError(string message) : base(message) { } 
    } 


    public class OperationFailed : ControllerError 
    { 
     public string Code; 

     public OperationFailed(string code, string message) : base(message) 
     { 
      this.Code = code; 
     } 
    } 
"@ 

Add-Type -TypeDefinition $def 


$o = [OperationFailed]::new("500","internal server error") 
を使用する必要があります