2015-11-05 2 views
0

Я знаю, что хорошая практика не придать другим объектам одно и то же имя, но ради любопытства можно ли выбрать конкретный объект из нескольких объектов с тем же именем?Как выбрать между объектами в Python

>>> exampleobject=0 
>>> def exampleobject(): 
...  print('This is a function.') 
>>> class exampleobject: 
...  def exampleobject(): 
...   print('Hello World!') 
>>> type(exampleobject) 
    <class 'type'> 

И так далее. Как вы можете видеть, тип объекта зависит от того, в каком порядке вы их определяете. Есть ли объяснение этому?

Кроме того, как только вы определяете функцию вместо переменной с тем же именем, удаляется ли переменная?

P.S. Я знаю, что этот вопрос звучит глупо.

+0

мусора коллектор будет собирать предыдущие данные, так как нет других ссылок на эти данные. – khajvah

+0

Не указывайте переменные так же, как встроенные. ('object' является встроенным) – ppperry

+0

Почему * не будет * это зависит от того, какой порядок вы их определяете? Если вы вызываете что-то «foo», а затем вызываете что-то еще «foo», почему бы вам не ожидать, что «foo» ссылается на последнее, для чего вы использовали имя? –

ответ

2

Python является динамическим языком, так что вы можете присвоить значения различных типов (INT, строка, функция) к одной и той же переменной:

>>> o=1 
>>> globals() 
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'o': 1, '__package__': None} 
>>> type(o) 
<type 'int'> 
>>> def o(): 
...  print 1 
... 
>>> type(o) 
<type 'function'> 
>>> globals() 
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'o': <function o at 0x7fba38e21578>, '__package__': None} 
+0

Вижу. Однако была ли удалена первая переменная 'o'? – JAW

+0

не удаляется, ему присваивается другое значение, функция вместо int – ISanych

+0

Фактически o является ссылочной переменной, поэтому она не будет удалена, на самом деле объект, которому он указывал, может быть удален (мусор/собранный), что o теперь указывает на что-то еще, и нет других ссылочных переменных, которые содержат ссылку на эту переменную. –

1

В примере, который вы указали, объект не является фактическим объектом, а просто ссылкой на объект. В python все является объектом.

Для большей ясности, я буду использовать myObj. Так,

myObj=2 

сделает myObj, чтобы указать на целочисленный объект.

class myObj: 
    pass 

создаст объект нового типа и присвоит его ссылку ссылочной переменной myObj. Таким образом, переназначение ручек разных объектов в одну и ту же ссылочную переменную определяет тип ссылочной переменной. Другими словами, type (myObj) даст вам тип объекта, на который указывает myObj.

Для получения дополнительной информации. обратитесь к документам python.

1

Вы можете посмотреть на выход globals(). Значение, указанное в текущем файле, будет храниться там. Поэтому, если вы определяете два объекта с одинаковым именем, первый будет переопределен вторым. Также вы можете попробовать globals['A']=1, которая равна A=1

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