Найти - Пользователи
Полная версия: Структура с различными типами
Начало » Python для экспертов » Структура с различными типами
1
Imnotgoga
Как в Python получить подобную структуру:
MyType = packed record
Date: TDateTime;
Time: TTime;
Data: Double;
All: Byte;
S: String;
end;
pythonwin
либо через класс
import datetime
class MyType:
    DateTime = datetime.datetime.now()
    Data = 0.0
    All = 0
    S = ''
    def __init__(self, DateTime, Data, All, S):
        self.DateTime = DateTime
        self.Data = Data
        self.All = All
        self.S = S[:5]
myt1= MyType(datetime.datetime.now(), 15.6, 178, '1234567890')

или через словари
import datetime
d= dict(DateTime = datetime.datetime.now(), Data = 15.6, All = 178, S = '1234567890')
print d
Александр Кошелев
Немного не по теме, но я спрошу. Разве вот это нужно:
pythonwin
class MyType:
DateTime = datetime.datetime.now()
Data = 0.0
All = 0
S = ''
? Т.е. зачем так писать, если потом в __init__ всё инициализиуется и так?
bialix
Daevaorn
Немного не по теме, но я спрошу. Разве вот это нужно:
pythonwin
class MyType:
DateTime = datetime.datetime.now()
Data = 0.0
All = 0
S = ''
? Т.е. зачем так писать, если потом в __init__ всё инициализиуется и так?
действительно, так лучше не писать.
Объявление атрибутов на уровне класса автоматически делает их общими для всех экземпляров такого класса.
И потом можно легко наступить на грабли, если какие-то переменные позволяют модифицировать их значения inplace
(например списки, наборы и словари).
bialix
lorien
4.3 struct – Interpret strings as packed binary data

This module performs conversions between Python values and C structs represented as Python strings. It uses format strings (explained below) as compact descriptions of the lay-out of the C structs and the intended conversion to/from Python values. This can be used in handling binary data stored in files or from network connections, among other sources.
Этот модуль удобен для упаковки/распаковки данных при сериализации или обмене с си-кодом.
Но не удобен для постоянной работы.
pythonwin
Daevaorn
? Т.е. зачем так писать, если потом в __init__ всё инициализиуется и так?
я сначало написал пример где были только параметры в init , потом прикинул что тому кто пишет на паскале проще для понимания код второго класса
bialix
действительно, так лучше не писать.
Объявление атрибутов на уровне класса автоматически делает их общими для всех экземпляров такого класса.
И потом можно легко наступить на грабли, если какие-то переменные позволяют модифицировать их значения inplace
(например списки, наборы и словари).
можно пример?
masai
Лучше всего использовать словарь. Он наиболее близок к традтиционным структурам, к тому же является встроенным типом, что, имхо, должно положительно сказаться на скорости по сравнению с реализацией через класс. Да и объявлений никаких делать не нужно будет.
j2a
pythonwin
bialix
действительно, так лучше не писать.
Объявление атрибутов на уровне класса автоматически делает их общими для всех экземпляров такого класса.
И потом можно легко наступить на грабли, если какие-то переменные позволяют модифицировать их значения inplace
(например списки, наборы и словари).
можно пример?
>>> class Foo(object):
… immutable = ('one', ‘two’)
… mutable =

>>> bar = Foo()
>>> buz = Foo()
>>> bar.mutable.append('three')
>>> buz.mutable

Александр Кошелев
bialix
действительно, так лучше не писать.
Объявление атрибутов на уровне класса автоматически делает их общими для всех экземпляров такого класса.
И потом можно легко наступить на грабли, если какие-то переменные позволяют модифицировать их значения inplace
(например списки, наборы и словари).
спасибо, я так и думал
pythonwin
можно пример?
я немного изменю примерj2a'а:
>>> class Foo:
...     bar = [ 1, 2 ]
...
>>> foo = Foo()
>>> foo.bar.append( 3 )
>>> Foo.bar
[1, 2, 3]
>>> foo2 = Foo()
>>> foo2.bar
[1, 2, 3]
pythonwin
j2a, Daevaorn, спасибо
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