-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


[] . Python

, 02 2017 . 02:36 +

"namedtuple", , , , . , .



, .


? .


. .


>>> tup = ('hello', object(), 42)
>>> tup
('hello', , 42)
>>> tup[2]
42
>>> tup[2] = 23
TypeError: "'tuple' object does not support item assignment"

, . . .


, . , . slip-of-the-mind , .



.


, . , - .


, , ..., . , , . .


:


>>> from collections import namedtuple
>>> Car = namedtuple('Car' , 'color mileage')

, collections. Python 2.6. "Car" : "color" "mileage".


. "color mileage"?


, split() . , , , , :


>>> 'color mileage'.split()
['color', 'mileage']
>>> Car = namedtuple('Car', ['color', 'mileage'])

, , . , , :


>>> Car = namedtuple('Car', [
...     'color',
...     'mileage',
... ])

, "car" Car. , Car "color" "mileage":


>>> my_car = Car('red', 3812.4)
>>> my_car.color
'red'
>>> my_car.mileage
3812.4

'*' :


>>> color, mileage = my_car
>>> print(color, mileage)
red 3812.4
>>> print(*my_car)
red 3812.4

, . :


>>> my_car[0]
'red'
>>> tuple(my_car)
('red', 3812.4)

, :


>>> my_car
Car(color='red' , mileage=3812.4)

, , . , AttributeError:


>>> my_car.color = 'blue'
AttributeError: "can't set attribute"

. , "", .


, .



, , .


>>> Car = namedtuple('Car', 'color mileage')
>>> class MyCarWithMethods(Car):
...     def hexcolor(self):
...         if self.color == 'red':
...            return '#ff0000'
...         else:
...             return '#000000'

MyCarWithMethods hexcolor() , :


>>> c = MyCarWithMethods('red', 1234)
>>> c.hexcolor()
'#ff0000'

, . , . .


, - . ._fields :


>>> Car = namedtuple('Car', 'color mileage')
>>> ElectricCar = namedtuple(
...     'ElectricCar', Car._fields + ('charge',))

:


>>> ElectricCar('red', 1234, 45.0)
ElectricCar(color='red', mileage=1234, charge=45.0)


_fields , . , , "" .


, : . , , . , , !


. _asdict(). :


>>> my_car._asdict()
OrderedDict([('color', 'red'), ('mileage', 3812.4)])

JSON, :


>>> json.dumps(my_car._asdict())
'{"color": "red", "mileage": 3812.4}'

_replace(). (shallow) :


>>> my_car._replace(color='blue')
Car(color='blue', mileage=3812.4)

, , _make() :


>>> Car._make(['red', 999])
Car(color='red', mileage=999)


, .


, , , . , , .


, , ( ) .


, , , . .


, , , , Python .



  • collections.namedtuple .
  • , .
  • (_), . .
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330034/

:  

: [1] []
 

:
: 

: ( )

:

  URL