Уведомления

Группа в Telegram: @pythonsu

#1 Май 20, 2011 14:40:31

dizel3d
От:
Зарегистрирован: 2011-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Внутренние классы в python

Поддерживает ли python внутренние классы (такие как в Java)? Если да, приведите, пожалуйста, пример.



Офлайн

#2 Май 20, 2011 15:00:08

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Внутренние классы в python

class Owner(object):

class A(object):
x = 0
def __init__(self, x):
self.x = x

a = A(4)

class B(object):
a = '10'

class WTFImDoing(object):
pass

wtf = Owner.B.WTFImDoing()



Офлайн

#3 Май 20, 2011 15:37:09

dizel3d
От:
Зарегистрирован: 2011-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Внутренние классы в python

regall да, кстати, класс B в данном случае является не внутренним, а вложенным. А мне надо внутренний (вложенный нестатический класс)



Офлайн

#4 Май 20, 2011 15:49:26

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Внутренние классы в python

А вот таких нет. Считается, что функциональных замыканий достаточно.



Офлайн

#5 Май 20, 2011 16:21:55

dizel3d
От:
Зарегистрирован: 2011-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Внутренние классы в python

спасибо



Офлайн

#6 Май 20, 2011 16:31:11

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Внутренние классы в python

Не совсем понял как это.
Так?

>>> Owner().A is not Owner().A

И как и зачем такое использовать?
Может оно мне очень нужно, а я дурачок этого не понимаю :-).

..bw



Офлайн

#7 Май 20, 2011 19:02:01

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Внутренние классы в python

http://www.quizful.net/post/inner-classes-java

В Питоне действительно не нужны, а в Яве сильно улучшают жизнь.
Такой себе костыль, симпатичный и удобный



Офлайн

#8 Май 20, 2011 20:59:23

dizel3d
От:
Зарегистрирован: 2011-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Внутренние классы в python

Имитация внутренних классов. =)

class A:
def show(self):
print 'Hello!'

def B(self):
class _B:
def __init__(self, outer=self):
self.outer = outer

def show(self):
self.outer.show()

return _B()

a = A()
b = a.B()
a.show()
b.show()



Офлайн

#9 Май 20, 2011 21:37:22

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Внутренние классы в python

import abc
import new

class B(object):
__metaclass__ = abc.ABCMeta
outer = abc.abstractproperty()

class A(object):
def __init__(self):
self.B = new.classobj('B', (B,), {'outer': self})

a1 = A()
a2 = A()

assert a1.B is not a2.B
assert a1.B.outer is a1
assert a1.B().outer is a1
assert isinstance(a1.B(), B)
..bw



Отредактировано (Май 20, 2011 21:40:07)

Офлайн

#10 Май 20, 2011 22:59:27

dizel3d
От:
Зарегистрирован: 2011-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Внутренние классы в python

bw, жесткач! =D
Идеологически такое решение лучше, но выглядит адски.
Не уверен, что нужно “assert a1.B is not a2.B”.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version