ДЯ и наследование
От: neFormal Россия  
Дата: 11.04.10 20:10
Оценка:
А можно в каких-нибудь динамических языках отменить наследование?
Если да, то как это реализовано в синтаксисе?
...coding for chaos...
Re: ДЯ и наследование
От: Курилка Россия http://kirya.narod.ru/
Дата: 11.04.10 20:55
Оценка:
Здравствуйте, neFormal, Вы писали:

F>А можно в каких-нибудь динамических языках отменить наследование?

F>Если да, то как это реализовано в синтаксисе?

Что ты имеешь в виду под "отменить наследование"? final из жабы и sealed из шарпа?
Re: ДЯ и наследование
От: Lloyd Россия  
Дата: 11.04.10 21:09
Оценка: 6 (1) :)
Здравствуйте, neFormal, Вы писали:

F>А можно в каких-нибудь динамических языках отменить наследование?


В javascript-е классы эмулируются через использование прототипов. Соответственно, сменив прототип прототипа можно "как бы" сменить его "как бы" базовый класс.

F>Если да, то как это реализовано в синтаксисе?
Re[2]: ДЯ и наследование
От: neFormal Россия  
Дата: 11.04.10 21:19
Оценка:
Здравствуйте, Курилка, Вы писали:

F>>А можно в каких-нибудь динамических языках отменить наследование?

F>>Если да, то как это реализовано в синтаксисе?
К>Что ты имеешь в виду под "отменить наследование"? final из жабы и sealed из шарпа?

Нет, я про возможность заявить "этот класс больше не наследник вот этого класса". Под это так же подпадает вариант "сменить родителя", как рядом сказал Lloyd.
...coding for chaos...
Re[3]: ДЯ и наследование
От: Курилка Россия http://kirya.narod.ru/
Дата: 11.04.10 21:31
Оценка:
Здравствуйте, neFormal, Вы писали:

F>Здравствуйте, Курилка, Вы писали:

К>>Что ты имеешь в виду под "отменить наследование"? final из жабы и sealed из шарпа?
F>Нет, я про возможность заявить "этот класс больше не наследник вот этого класса". Под это так же подпадает вариант "сменить родителя", как рядом сказал Lloyd.

Ну вот из питона возможно такое покатит тогда:

>>> class X(object):
... x = 1
...
>>> x=X()
>>> x.x
1
>>> class Y(object):
... y = 1
...
>>> x.__class__ = Y
>>> x.y
1
>>> x.x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Y' object has no attribute 'x'

Re: ДЯ и наследование
От: c-smile Канада http://terrainformatica.com
Дата: 11.04.10 21:50
Оценка:
Здравствуйте, neFormal, Вы писали:

F>А можно в каких-нибудь динамических языках отменить наследование?

F>Если да, то как это реализовано в синтаксисе?

В sciter (tiscript) можно сменить класс объекта:

class A: Behavior 
{
  function onMouse(event) { ... }
}
class B: Behavior 
{
  function onMouse(event) { ... }
}

someDomElement.prototype = A;
...
someDomElement.prototype = B;


Используется например если некий DOM элемент имеет два разных состояния которые требуют принципиально разных способов обработки событий.
Re[4]: ДЯ и наследование
От: neFormal Россия  
Дата: 11.04.10 22:00
Оценка:
Здравствуйте, Курилка, Вы писали:

F>>Нет, я про возможность заявить "этот класс больше не наследник вот этого класса". Под это так же подпадает вариант "сменить родителя", как рядом сказал Lloyd.

К>Ну вот из питона возможно такое покатит тогда:
К>

>>>> x.__class__ = Y


Чорд, похоже я не так понял Lloyd-а.
Меня интересует смена дерева наследования класса, а не смена класса у объекта (хотя это тоже забавная штука).
В питоне это, наверное, выглядело бы, как:
>>>> class Foo: x = 1
>>>> class Bar(Foo): y = 2
>>>> Bar.__parent__
Foo

Ну и со всеми вытекающими динамическими извратами.
...coding for chaos...
Re[2]: ДЯ и наследование
От: neFormal Россия  
Дата: 11.04.10 22:03
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>
CS>class A: Behavior 
CS>

CS>Используется например если некий DOM элемент имеет два разных состояния которые требуют принципиально разных способов обработки событий.

А есть что-нибудь вроде?
A._parent = MyAnotherBehavior
...coding for chaos...
Re[3]: ДЯ и наследование
От: c-smile Канада http://terrainformatica.com
Дата: 11.04.10 22:26
Оценка: 9 (1)
Здравствуйте, neFormal, Вы писали:

F>Здравствуйте, c-smile, Вы писали:


CS>>
CS>>class A: Behavior 
CS>>

CS>>Используется например если некий DOM элемент имеет два разных состояния которые требуют принципиально разных способов обработки событий.

F>А есть что-нибудь вроде?

F>
F>A._parent = MyAnotherBehavior
F>


Угу. class это такой же object как и все остальное. Т.е. у него можно тоже менять prototype (parent в твоей терминологии)

Вот пример для Sciter:

<html>
<head>
<title></title>
<script type="text/tiscript">

class A: Behavior
{
function onClick() { stdout.println("I am an A object"); }
}
class B: Behavior
{
function onClick() { stdout.println("I am a B object"); }
}

class C:A {}

self.$(button#as-a).onClick = function() { C.prototype = A; }
self.$(button#as-b).onClick = function() { C.prototype = B; }

</script>
<style>
button#test { prototype:C; }
</style>
</head>
<body>
<button #test>Test</button>
<button.switch type='radio' #as-a checked>As A</button>
<button.switch type='radio' #as-b>As B</button>
</body>
</html>
Re[5]: ДЯ и наследование
От: ShaggyOwl Россия http://www.rsdn.org
Дата: 12.04.10 07:16
Оценка: 6 (1)
Здравствуйте, neFormal, Вы писали:

F>Меня интересует смена дерева наследования класса, а не смена класса у объекта (хотя это тоже забавная штука).


Признаться не очень понимаю, зачем оно надо, но
http://docs.python.org/library/stdtypes.html#special-attributes

class.__bases__
The tuple of base classes of a class object.

И этот кортеж можно поменять.
То, что надо?
Хорошо там, где мы есть! :)
Re[6]: ДЯ и наследование
От: neFormal Россия  
Дата: 12.04.10 07:56
Оценка:
Здравствуйте, ShaggyOwl, Вы писали:

F>>Меня интересует смена дерева наследования класса, а не смена класса у объекта (хотя это тоже забавная штука).

SO>Признаться не очень понимаю, зачем оно надо, но

ну, иногда может захотеться один класс, который в каких то случаях наследует большой тяжёлый функционал, а в других — нет..
ну или как показал рядом c-smile пример с событиями..

SO>И этот кортеж можно поменять.

SO>То, что надо?

ага, именно оно..
...coding for chaos...
Re: ДЯ и наследование
От: anonymous Россия http://denis.ibaev.name/
Дата: 12.04.10 15:39
Оценка: 6 (1)
Здравствуйте, neFormal, Вы писали:

F>А можно в каких-нибудь динамических языках отменить наследование?

F>Если да, то как это реализовано в синтаксисе?

В Perl каждый класс имеет специальный массив @ISA (is a), содержащий список родительских классов. Соответственно, можно производить с ним какие-то манипуляции. Специальных синтаксических конструкций для этого нет, работать полагается так же, как и с любыми другими массивами.
perl наследование
Re[7]: ДЯ и наследование
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 14.04.10 14:48
Оценка:
Здравствуйте, neFormal, Вы писали:


F>>>Меня интересует смена дерева наследования класса, а не смена класса у объекта (хотя это тоже забавная штука).

SO>>Признаться не очень понимаю, зачем оно надо, но

F>ну, иногда может захотеться один класс, который в каких то случаях наследует большой тяжёлый функционал, а в других — нет..

F>ну или как показал рядом c-smile пример с событиями..

Зачем тогда так сложно?


def getClass(heavy):
  if heavy:
    class Impl: pass
    return Impl
  class Impl2: pass
  return Impl2;
Re[8]: ДЯ и наследование
От: neFormal Россия  
Дата: 14.04.10 18:07
Оценка:
Здравствуйте, BitField, Вы писали:

F>>ну, иногда может захотеться один класс, который в каких то случаях наследует большой тяжёлый функционал, а в других — нет..

BF>Зачем тогда так сложно?
BF>
BF>def getClass(heavy):
BF>  if heavy:
BF>    class Impl: pass
BF>    return Impl
BF>  class Impl2: pass
BF>  return Impl2;
BF>


а зачем getClass, если можно оставить нормальное имя и подменять в ходе работы?.
...coding for chaos...
Re[9]: ДЯ и наследование
От: Manticore США http://github.com/fjarri
Дата: 11.05.10 06:27
Оценка:
Здравствуйте, neFormal, Вы писали:

F>а зачем getClass, если можно оставить нормальное имя и подменять в ходе работы?.


Потому что "explicit is better than implicit" (c) The Zen of Python
Re[10]: ДЯ и наследование
От: neFormal Россия  
Дата: 11.05.10 07:51
Оценка:
Здравствуйте, Manticore, Вы писали:

F>>а зачем getClass, если можно оставить нормальное имя и подменять в ходе работы?.

M>Потому что "explicit is better than implicit" (c) The Zen of Python

"явность" — понятие отчасти субъективное..
но ещё хотелось сохранить идентичный синтаксис для двух родственных реализаций..
...coding for chaos...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.