Python. Создание экземпляра класа

Автор Тема: Python. Создание экземпляра класа  (Прочитано 7507 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mikoАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
Доброго времени суток !
Изучая Python столкнулся с тем что в Revit API совершенно нету справки для Python, перерыл много информации но так особо и не нашел как создавать мне нужные веши. Итак суть проблемы такова:

C#:
Код - C# [Выбрать]
  1. ElementClassFilter symbolFilter = new ElementClassFilter(typeof(FamilySymbol));

и тд. То есть создаем новый класс  на основе базового. А теперь сама проблема:

Python:
Код - Python [Выбрать]
  1. class ElementClassFilter(symbolFilter):
  2.     def __init__(typeof(FamilySymbol))

правильно ли я понимаю ? наверное нет так как ядро питона ругается  на скобки в методах наследуемого класса. Буду рад любому совету.
   
« Последнее редактирование: 29-09-2015, 10:22:09 от Виктор Чекалин »

Оффлайн Дмитрий Дронов

  • ADN OPEN
  • Сообщений: 20
  • Карма: 3
  • Finder
Возможно вам поможет этот пример по созданию коллектора:

Код - Python [Выбрать]
  1. import clr
  2. clr.AddReference('RevitAPI')
  3. from Autodesk.Revit.DB import *
  4.  
  5. clr.AddReference("RevitServices")
  6. import RevitServices
  7. from RevitServices.Persistence import DocumentManager
  8.  
  9. import System
  10.  
  11. doc = DocumentManager.Instance.CurrentDBDocument
  12. elementlist = []
  13.  
  14. FamilyType = UnwrapElement(IN[0])
  15. BltInCat = System.Enum.ToObject(BuiltInCategory, FamilyType.Category.Id.IntegerValue)
  16. SymbolCollector  = FilteredElementCollector(doc)
  17. SymbolCollector.OfCategory(BltInCat)
  18. ftlist =  list()
  19. for item in SymbolCollector.ToElements():
  20.     if item.GetTypeId().IntegerValue == FamilyType.Id.IntegerValue:
  21.         ftlist.append(item)
  22. elementlist.append(ftlist)
  23. OUT = elementlist


Простите, я не большой специалист ревитАПИ. И работаю с ним через динамо, поэтому на вход поставлю IN[0] а на выход OUT. Плюс использую чисто динамовский метод UnwrapElement. Мне самому интересно узнать решение вашего вопроса. Если у вас получится - напишите пожалуйста решение. Спасибо.



Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
miko
Приветствую на форуме.


C#:
ElementClassFilter symbolFilter = new ElementClassFilter(typeof(FamilySymbol));

и тд. То есть создаем новый класс  на основе базового.
Это называется создавать экземпляр класса, а не новый класс на основе базового.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikoАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
Александр Ривилис спасибо !
да действительно порылся и выяснил что это все же экземпляр класса в итоге в Python:
symbolFilter= ElementClassFilter(type(FamilySymbol)) ? :) не могу разобраться с typeof в C# точнее какой метод применить для Python

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Я не пишу для Revit
2. Я не пишу на Python
3. Поиск в Internet говорит про функцию type()
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikoАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
Re: Python. Создание экземпляра класа
« Ответ #5 : 27-09-2015, 14:03:31 »
все таки поиск для тех кто понимает что ищет ..... а у меня пока большие пробелы со знаниями в программировании !
итак в C#:
typeof - используется для получения типа на основе какого-либо класса
в Python:
type() - воспринимает объект произвольного типа и возвращает его тип. Аргумент действительно может быть произвольного типа: число, строка, список, словарь, кортеж, функция, класс, модуль и даже сам тип.
В итоге окончательный вид :
C#:
ElementClassFilter symbolFilter = new ElementClassFilter(typeof(FamilySymbol));
Python:
symbolFilter= ElementClassFilter(type(FamilySymbol))
поправьте если не прав !?

Оффлайн Дмитрий Дронов

  • ADN OPEN
  • Сообщений: 20
  • Карма: 3
  • Finder
Re: Python. Создание экземпляра класа
« Ответ #6 : 27-09-2015, 14:21:53 »
Питон это волшебный язык для новичков.
половину синтаксиса он срезает.
« Последнее редактирование: 27-09-2015, 21:23:05 от Дмитрий Дронов »

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Python. Создание экземпляра класа
« Ответ #7 : 29-09-2015, 10:26:02 »
в Revit API совершенно нету справки для Python
Так а Python официально и не поддерживается.
Небольшая поправка. Я бы сказал нет примеров для Python. Сама же документация по API не привязана к какому-либо языку программирования, так как содержит описание классов, методов, свойств и т.п.
Ну а синтаксис конкретного языка, который выбрал разработчик (Python в данном случае) - это уже проблема программиста. Это уже он обязан знать как создавать новые экземпляры класса, присваивать переменные, использовать индексацию и т.д.