Найти - Пользователи
Полная версия: Внутренние классы в python
Начало » Python для новичков » Внутренние классы в python
1 2
dizel3d
Поддерживает ли python внутренние классы (такие как в Java)? Если да, приведите, пожалуйста, пример.
regall
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()
dizel3d
regall да, кстати, класс B в данном случае является не внутренним, а вложенным. А мне надо внутренний (вложенный нестатический класс)
Андрей Светлов
А вот таких нет. Считается, что функциональных замыканий достаточно.
dizel3d
спасибо
bw
Не совсем понял как это.
Так?

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

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

..bw
Андрей Светлов
http://www.quizful.net/post/inner-classes-java

В Питоне действительно не нужны, а в Яве сильно улучшают жизнь.
Такой себе костыль, симпатичный и удобный
dizel3d
Имитация внутренних классов. =)
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()
bw
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
dizel3d
bw, жесткач! =D
Идеологически такое решение лучше, но выглядит адски.
Не уверен, что нужно “assert a1.B is not a2.B”.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB