2015-07-17 2 views
2

Я исхожу из фона MATLAB. Когда я создаю определения классов, я могу создавать «пустые» имена переменных, а затем присваивать им значения или объекты. То естьКак объявить неинициализированную переменную в определении класса в python


classdef myclass < handle 

    properties 
     var1 
     var2 
    end 
end 

a = myClass; 
a.var1 = someOtherClassObject; 

Как я могу сделать это в Python? Я пробовал что-то вроде этого:

class myClass: 
def __init__(self): 
    var1 
    var2 

a = myClass() 
a.var1 = someOtherClassObject() 

Но это неверно. Основная цель состоит в том, чтобы построить определение моего класса, как структуры, а затем перейти и создать экземпляр переменных при необходимости.

И помощь будет оценена по достоинству.

+0

спасибо. Вот что мне нужно «Нет». (Кстати, хороший глаз, я забыл «я» в моем примере) – userJohn

ответ

6

Вы должны использовать self. создавать переменные для экземпляров (объектов)

Я не думаю, что вы можете иметь неинициализированное имя в питоне, а почему бы не просто инициализировать переменный экземпляр в None? Пример -

class myClass: 
    def __init__(self): 
     self.var1 = None 
     self.var2 = None 

позже Вы можете пойти и установить их на все, что вы хотите использовать -

a = myClass() 
a.var1 = someOtherClassObject 

Если вам необходимо определить переменные класса (которые являются общими для всех экземпляров), вам нужно определить их вне __init__() метод, непосредственно внутри класса, как -

class myClass: 
    var1 = None 
    var2 = None 
    def __init__(self): 
     pass 
+0

Спасибо. Мне не нравится динамически добавлять свойства/поля/атрибуты. Мне нравится определение «допустимых» полей. Но спасибо за полезную информацию. – userJohn

+0

Также обратите внимание, что, как сказано в ответе @BlackCat, было бы желательно создать все переменные экземпляра, которые вы собираетесь использовать внутри функции '__init __()', особенно если вы собираетесь использовать эти переменные позже в другие методы класса, некоторые компиляторы даже жалуются, когда вы определяете переменные экземпляра вне функции '__init __()'. –

0

Там нет такого понятия, как «инициализированы переменные» в Python, как у вас есть в MATLAB, потому что они не включенные в другие группировки обходимо. Если вы хотите добавить переменный экземпляр класса позже, просто добавьте их:

>>> class myclass: 
>>>  pass 
>>> 
>>> a = myclass() 
>>> a.var1 = 5 
>>> a.var1 
5 

Вы также можете добавить их непосредственно к классу, так что они появляются во всех экземплярах класса. Это также добавляет их к экземплярам класса, созданного ранее, так что это может быть опасно, если вы не будете осторожны:

>>> class myclass: 
>>>  pass 
>>> 
>>> a = myclass() 
>>> a.var1 
AttributeError: 'myclass' object has no attribute 'var1' 
>>> 
>>> myclass.var1 = 5 
>>> a.var1 
5 

Вы не хотите, чтобы сделать это в MATLAB, потому что вы должны использовать addprop, чтобы добавить его во-первых, что бесполезно сложно. В большинстве случаев Python является более динамичным языком, чем MATLAB. Вместо того, чтобы инициализировать что-то, а затем, делая это, в Python вы просто это делаете.

Технически они не являются «переменными», в Python их называют «атрибутами», а в MATLAB они называются «свойствами» (у Python есть что-то называемое свойствами, но они не совпадают с свойствами в MATLAB).

+0

Возможно, не стоит полагаться на пользователя, чтобы создавать переменные для экземпляров вне класса, особенно если переменные будут использоваться внутри методов экземпляра.Это может привести к неправильному поведению, если пользователь не правильно *** создает *** эти переменные, перед вызовом метода –

+0

Это зависит от того, что пользователь хочет делать с атрибутами. Если они будут использоваться в методах, то определенно это не очень хорошая идея, так же, как было бы неплохо сделать это в MATLAB с неопределенными свойствами. Но если вы просто хотите сохранить некоторые пользовательские данные для своего собственного использования, в этом нет ничего плохого. – TheBlackCat

Смежные вопросы