Перевести класс С# на python [закрыто]

avatar
Henry
9 августа 2021 в 04:38
96
2
-4

Я получил класс C#, определенный следующим образом. У меня есть один конструктор и внутренний класс со свойствами. Как я могу перевести его на python?

class Person
{
    Property string Name {get;set;}
    Proeprty InnerClass MyInnerClass {get;set;}

    //constructor
    Person(string name, InnerClass myinnerClass)
    {
        Name = name;
        MyInnerClass = myinnerClass;
        MyInnerClass .car = "Mercedes";
    }
    
    class InnerClass
    {
        Property string Car {get;set;}
    }
}
Источник
Paul Rooney
9 августа 2021 в 04:43
0

Главное, что следует учитывать, это то, что python обычно не использует геттеры и сеттеры. Вы можете либо просто получить доступ к свойствам напрямую для Name и MyInnerClass, либо использовать декоратор @property для доступа к этим свойствам через функции.

Ответы (2)

avatar
William Bradley
9 августа 2021 в 04:48
0

Не программист на C#, но если свойство определено по умолчанию get; set;, я не вижу необходимости делать его контролируемым. Если вам нужны псевдоприватные переменные или мутаторы с побочными эффектами, загляните в декоратор Python property.

class Person:
    # use __slots__ if your class's attributes can be determined at
    # "compile"-time
    __slots__ = ["name", "inner_obj"] 

    def __init__(name: str, inner_obj: 'Person.InnerClass') -> None:
        self.name = name
        self.inner_obj = inner_obj
        self.inner_obj.car = "Mercedes"

    class InnerClass:
         __slots__ = ["car"]
avatar
David Culbreth
9 августа 2021 в 04:46
2

Между Python и C# существуют довольно существенные различия, но я приведу максимально точное приближение. В Python нет реальной концепции «частных» или «общедоступных» переменных. по умолчанию все общедоступно.

В python есть способы обозначить, должно ли свойство быть внутренним или внешним, но поскольку все переменные в вашем примере все равно были общедоступными, я не буду об этом беспокоиться.

В любом случае, здесь ничего не происходит:

class Person: 

    class InnerClass:
        def __init__(self, car=None):
            self.car = car

    def __init__(self, name:str, myinnerClass: InnerClass):
        self.Name = name
        self.MyInnerClass = myinnerClass
        self.MyInnerClass.car = "Mercedes"

Henry
9 августа 2021 в 05:08
0

Давайте представим, что строка свойств Car {get;set;} в InnerClass теперь выглядит так: Строка свойств Car<Car>{get;set;} . Будет ли разница с вашим кодом?

David Culbreth
9 августа 2021 в 12:51
0

Привет, Генри... эта строка не имеет смысла даже в C#. вам следует прочитать об использовании дженериков в C# для этих угловых скобок <types>.

Henry
9 августа 2021 в 13:32
0

Список свойств<Car> Car {get;set;}

David Culbreth
9 августа 2021 в 14:01
0

это все еще не имеет смысла. нигде вы не определили class Car