dizel3d
Май 20, 2011 14:40:31
Поддерживает ли python внутренние классы (такие как в Java)? Если да, приведите, пожалуйста, пример.
regall
Май 20, 2011 15:00:08
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
Май 20, 2011 15:37:09
regall да, кстати, класс B в данном случае является не внутренним, а вложенным. А мне надо внутренний (вложенный нестатический класс)
Андрей Светлов
Май 20, 2011 15:49:26
А вот таких нет. Считается, что функциональных замыканий достаточно.
dizel3d
Май 20, 2011 16:21:55
спасибо
Не совсем понял как это.
Так?
>>> Owner().A is not Owner().A
И как и зачем такое использовать?
Может оно мне очень нужно, а я дурачок этого не понимаю :-).
..bw
Андрей Светлов
Май 20, 2011 19:02:01
http://www.quizful.net/post/inner-classes-javaВ Питоне действительно не нужны, а в Яве сильно улучшают жизнь.
Такой себе костыль, симпатичный и удобный
dizel3d
Май 20, 2011 20:59:23
Имитация внутренних классов. =)
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()
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
Май 20, 2011 22:59:27
bw, жесткач! =D
Идеологически такое решение лучше, но выглядит адски.
Не уверен, что нужно “assert a1.B is not a2.B”.