Как создать вложенные объекты со свойствами в Python?

версия Cygwin GCC требует Cygwin быть установленной для программ, которые это компилирует.

версия MinGW ничего не требует после компиляции кроме рабочей копии Windows.

Вы не можете действительно смешать среду Cygwin и компиляторы MinGW вместе, потому что Cygwin изменяет пути предварительно скомпилированных библиотек.

, Если бы Вы нуждаетесь в оболочке стиля удара, но не хотите использовать Cygwin, я рекомендовал бы MSYS.

Cygwin в отличие от MinGW

, скопированного от , приложения MinGW Wiki

Cygwin принципом не рассматриваются "Собственное заявление Win32", потому что это полагается на CygwinВ® POSIX Emulation DLL или cygwin1.dll для функций Posix и не использует функции win32 непосредственно. MinGW, с другой стороны, обеспечивает функции, предоставленные API Win32. При портировании приложений под MinGW функции, не собственные к Win32 такой как fork(), mmap() или ioctl(), должны будут быть повторно реализованы в эквиваленты Win32 для приложения для функционирования правильно.

48
задан Jader Dias 6 October 2009 в 13:43
поделиться

6 ответов

Они имеют те же имена, что и соответствующие имена #define в стеке сокетов C BSD, за исключением Socket :: впереди. (И для протокола, чтобы точно ответить на ваш вопрос, я должен сказать ext / socket / socket.c " в дереве исходных текстов Ruby.) Итак:

>> require 'socket'
=> true
>> Socket::MSG_PEEK
=> 2

Вероятно, вы можете увидеть это, набрав man 2 recv , хотя вам может потребоваться сначала установить пакет страниц руководства. Есть также онлайн-страницы руководства, см., Возможно,: man 2 recv здесь .

На данный момент вот то, что вам нужно, это параметры Posix, взятые из справочной страницы NetBSD . В Linux доступно гораздо больше. При работе в Linux Ruby определяет дополнительные символы, в противном случае они могут быть неопределенными в зависимости от хоста. (Спасибо,

85
ответ дан 7 November 2019 в 12:05
поделиться

Ответ Питера

obj = lambda: None
obj.propertyName = 'propertyValue'
28
ответ дан 7 November 2019 в 12:05
поделиться

Я не знаю, есть ли встроенный способ сделать это, но вы всегда можете определить класс вроде этого:

class InlineClass(object):
    def __init__(self, dict):
        self.__dict__ = dict

obj = InlineClass({'propertyName' : 'propertyValue'})
13
ответ дан 7 November 2019 в 12:05
поделиться

Мне нравится идея Smashery , но Python, похоже, доволен тем, что позволяет вам изменять классы самостоятельно :

>>> class Inline(object):
...     pass
...
>>> obj = Inline()
>>> obj.test = 1
>>> obj.test
1
>>>

У меня отлично работает в Python 2.5. Обратите внимание, что вы должны сделать это для класса, производного от объекта - это не сработает, если вы измените строку на obj = object .

6
ответ дан 7 November 2019 в 12:05
поделиться

В Python легко объявить класс с помощью функции __ init __ () , которая может настроить экземпляр за вас с дополнительными аргументами. Если вы не укажете аргументы, вы получите пустой экземпляр, а если вы укажете некоторые или все аргументы, вы инициализируете экземпляр.

Я объяснил это здесь (мой самый высокий на сегодняшний день ответ ), поэтому я не буду перепечатывать объяснение. Но, если есть вопросы, задавайте, и я отвечу.

Если вам просто нужен общий объект, класс которого на самом деле не имеет значения, вы можете сделать следующее:

class Generic(object):
    pass

x = Generic()
x.foo = 1
x.bar = 2
x.baz = 3

Очевидным расширением было бы добавление функции __ str __ () , которая выводит что-то полезное.

​​Этот трюк иногда бывает удобен, когда вам нужен более удобный словарь. Мне легче набрать x.foo , чем x ["foo"] .

2
ответ дан 7 November 2019 в 12:05
поделиться
class test:
    def __setattr__(self,key,value):
        return value


myObj = test()
myObj.mykey = 'abc' # set your property and value
0
ответ дан 7 November 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: