create account

Tx cda0552a6e56ee51d4b91f7d435137eec8390203@33060228

Included in block 33,060,228 at 2019-05-20 01:58:03 (UTC)


Raw transaction

ref_block_num30,061
ref_block_prefix1,552,531,824
expiration2019-05-20 02:08:00
operations
0.
0.comment
1.
parent_author""
parent_permlinkcoogger
authorhakancelik
permlinksozluk-veri-tipini-python-nesnesine-donusturme
title"Sözlük veri tipini python nesnesine dönüştürme"
body"<center>
<a href="https://www.coogger.com/@hakancelik/sozluk-veri-tipini-python-nesnesine-donusturme">
<img alt="" src="https://www.coogger.com/media/images/python.jpg">
</a>
<a href="https://www.coogger.com/@hakancelik/sozluk-veri-tipini-python-nesnesine-donusturme">Read this content on coogger</a>
</center>
"
json_metadata"{"format": "markdown", "tags": ["coogger", "python"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "[TOC]\r\n\r\n<img gnrl=\"center br-4\" src=\"https://www.coogger.com/media/images/python.jpg\">\r\n<center><sub>[Kaynak](http://alikara.com)</sub></center>\r\n\r\n\r\n### Neler \u00f6\u011frenece\u011fiz ?\r\n- python s\u0131n\u0131f yap\u0131s\u0131 ( class )\r\n- isinstance\r\n```\r\n>>> type(isinstance)\r\n<class 'builtin_function_or_method'>\r\n```\r\n- setattr\r\n```\r\n>>> type(setattr)\r\n<class 'builtin_function_or_method'>\r\n```\r\n- items\r\nBildi\u011finiz gibi items dict veri t\u00fcr\u00fcndeki de\u011fi\u015fkenlerin \u00f6\u011felerini almak i\u00e7in kullan\u0131r\u0131z \u00f6rne\u011fin.\r\n```python\r\nfor key,value in {1:2,3:4}.items():\r\n\tprint(key,value)\r\n```\r\n\r\n### Gereksinimler\r\n- sadece python3\r\n> python 2 ise g\u00fcnceli takip etmek i\u00e7in python3 kullanmaya ba\u015flay\u0131n\r\n\r\n\r\n\r\n### Isinstance nedir ?\r\nisinstance,t\u0131pk\u0131 type methodu gibi nesnelerin t\u00fcr\u00fcn\u00fc bulmam\u0131z\u0131 ve bu bilgiyi kullanmam\u0131z\u0131 sa\u011flar,\r\n\r\n\u00f6rne\u011fin;\r\n\r\n```python\r\nnum = 0\r\nif type(num) == int: # num de\u011fi\u015fkenin veri t\u00fcr\u00fc e\u011fer integer ise\r\n\tpass\r\n```\r\n\r\nAyn\u0131 \u015feyi **isinstance** ile \u015fu \u015fekilde yapabiliyoruz.\r\n\r\n```python\r\nnumn = 0\r\nif isinstance(num,int):\r\n\tpass\r\n\r\n# veya \r\n\r\nnumn = 0\r\nif isinstance(num,(int,str)):\r\n\tpass\r\n```\r\n\u015eeklinde yapabiliyoruz, bu k\u0131s\u0131m anla\u015f\u0131lm\u0131\u015ft\u0131r umar\u0131m.\r\n\r\n### Setattr nedir ?\r\n\r\n**setattr** bir nesneye yeni bir de\u011fi\u015fken atamam\u0131z\u0131 sa\u011flar, kullan\u0131m\u0131 \u015fu \u015fekilde dir. `setattr(object, name, value)`\r\n>bunlar\u0131 bildi\u011fimize g\u00f6re as\u0131l konumuza gelebiliriz.\r\n\r\n\r\n## S\u00f6zl\u00fck veri tipini ( Dict ) python nesnesine d\u00f6n\u00fc\u015ft\u00fcrme\r\nBizlerin yapmak istedi\u011fi \u015fey \u015fu elimizde \u015fuan benzer bir dict olsun\r\n\r\n`d = {\"a\":\"b\",\"c\":\"d\"}`\r\nBiz python ile bu s\u00f6zl\u00fck veri t\u00fcr\u00fcn\u00fc \u015fu \u015fekilde kullanamay\u0131z,\r\n\r\n```python\r\n>>> d = {\"a\":\"b\",\"c\":\"d\"}\r\n>>> d.a\r\nTraceback (most recent call last):\r\n File \"<stdin>\", line 1, in <module>\r\nAttributeError: 'dict' object has no attribute 'a'\r\n```\r\n\r\n**AttributeError: 'dict' object has no attribute 'a'** bizlere bu \u015fekilde bir hata verecektir, o zaman yapmam\u0131z gereken \u015fey ***attribute*** etmek.\r\n\r\nKodlar\u0131m\u0131z\u0131n tamam\u0131.\r\n```python\r\nclass DictToObject():\r\n def __init__(self, d):\r\n for key, value in d.items():\r\n if isinstance(value, (list, tuple)):\r\n setattr(self, key, [DictToObject(x) if isinstance(x, dict) else x for x in value])\r\n else:\r\n setattr(self, key, DictToObject(value) if isinstance(value, dict) else value)\r\n```\r\n\u015eimdi burada bir for d\u00f6ng\u00fcs\u00fc var sebebi \u015fu, e\u011fer **DictToObject** s\u0131n\u0131f\u0131m\u0131za verece\u011fimiz s\u00f6zl\u00fck \u015fu \u015fekilde ise\r\n`d = {'a': 1, 'b': {'c': 2}, 'd': [\"hi\", {'foo': \"bar\"}]}` for d\u00f6ng\u00fcs\u00fc ile i\u00e7 i\u00e7e bulunan dict leri de s\u0131n\u0131f\u0131m\u0131za attribute edebilmektir bu k\u0131s\u0131mlar\u0131da tam olarak **5. ve 7.** sat\u0131rlarda yap\u0131l\u0131yor, yorum sat\u0131rlar\u0131n\u0131 kullanarak kodlar\u0131 ba\u015ftan sona anlatay\u0131m.\r\n\r\n--------\r\n\r\n```python\r\nclass DictToObject(): # s\u0131n\u0131f\u0131m\u0131z\u0131n ismi DictToObject\r\n def __init__(self, d): # d ad\u0131 ile bir parametre belirliyoruz.\r\n for key, value in d.items(): # yukar\u0131da itemi anlatt\u0131\u011f\u0131m k\u0131s\u0131m burada\r\n if isinstance(value, (list, tuple)): # isinstance ile gelen value list veya tuble ise,\r\n\t\t\t\t# yani [] veya () \u015feklinde birden fazla de\u011fer var ise\r\n setattr(self, key, [DictToObject(x) if isinstance(x, dict) else x for x in value])\r\n\t\t\t # setattr kullanarak ilk parametresine yani nesne yazmam\u0131z gereken yere self yaz\u0131yoruz bu bulundu\u011fumuz s\u0131n\u0131fa ekleme yapmas\u0131n\u0131 sa\u011flayacakt\u0131r. ikinci parametre dict'den gelen key bilgisi ve value k\u0131sm\u0131 ise \u00fc\u00e7\u00fcnc\u00fc parameter fakat buradaki olay \u015fu gelen value list veya tuble oldu\u011fu i\u00e7in for i\u00e7ine al\u0131yoruz **for x in value** ve demi\u015fki **if isinstance(x, dict) ** e\u011fer for ile gelen veri dict ise tekrardan **DictToObject** s\u0131n\u0131f\u0131m\u0131za at\u0131yoruz ve ayn\u0131 \u015feyler onun i\u00e7in devam ediyor ve burada value yerine attr olarak s\u0131n\u0131f g\u00f6ndermi\u015f oluyoruz **else x** bu k\u0131s\u0131m ise e\u011fer dict de\u011fil ise direk for ile gelen de\u011feri direk setattr ile class i\u00e7ine i\u015fle diyoruz.\r\n else:\r\n setattr(self, key, DictToObject(value) if isinstance(value, dict) else value)\r\n\t\t\t #bu k\u0131s\u0131m ise yukarda e\u011fer value dict veya tuble de\u011fil ise buras\u0131 \u00e7al\u0131\u015f\u0131r.\r\n\t\t\t # burda da gelen de\u011fi\u015fken *if isinstance(value, dict)* dict ise **DictToObject** tekrandan s\u0131n\u0131f\u0131m\u0131za geri g\u00f6nderileri ve i\u015flemler tekrar eder ve burada yine attr olarak s\u0131n\u0131f g\u00f6ndermi\u015f oluyoruz, e\u011fer dict de\u011filsede *else value* direk value de\u011ferini **setattr** ile s\u0131n\u0131fa i\u015fler.\r\n```\r\n\r\nBiraz kar\u0131\u015f\u0131k oldu, ama dikkatl\u0131 inceler ve okursan\u0131z anlayaca\u011f\u0131n\u0131z\u0131 tahmin ediyorum, bu kod ( s\u0131n\u0131f ) benim \u00e7ok i\u015fime yarayacak sizlerede anlatmak istedim.\r\n\r\n### Nas\u0131l kullan\u0131l\u0131r ? \r\nKodun \u00e7\u0131kt\u0131s\u0131n\u0131 a\u00e7\u0131kl\u0131yorum, \u00f6rnek ile anlatal\u0131m.\r\n\r\n```python\r\n>>> d = {\"a\": \"b\", \"c\": {\"d\": \"e\"}, \"f\": [\"hi\", {\"foo\": \"bar\"}]}\r\n>>> x = DictToObject(d)\r\n>>> x.c.d\r\ne\r\n>>> x.f[1].foo #bu k\u0131s\u0131m nas\u0131l oldu derseniz \r\n'bar'\r\n# \"f\": [\"hi\", {\"foo\": \"bar\"}] bu k\u0131s\u0131m list oldu\u011fu i\u00e7in ve i\u00e7inde dict oldu\u011fu i\u00e7in yukar\u0131da anlatt\u0131\u011f\u0131m \r\n# attr olarak s\u0131n\u0131f g\u00f6ndermi\u015f oluyoruz dedi\u011fim olaylar ger\u00e7ekle\u015fiyor. \r\n# yani bu \u015fekilde setattr(self, key, DictToObject(value))\r\n# bu \u015fekilde de\u011fil setattr(self, key, value)\r\n\r\n>>> x.__dict__ # bu \u015fekilde yaparak s\u0131n\u0131f i\u00e7indeki dict leri yani nesneleri g\u00f6rebilirsiniz.\r\n{'a': 'b', 'c': <__main__.DictToObject object at 0x0000025095AB45C0>, 'f': ['hi', <__main__.DictToObject object at 0x0000025095AB45F8>]}\r\n# burdan bak\u0131n normalde x.a yap\u0131nca b c\u0131kt\u0131s\u0131n\u0131 al\u0131r\u0131z fakat x.c yap\u0131nca bize yine s\u0131n\u0131f d\u00f6nd\u00fcrecektir yada \r\n# x.f yap\u0131nca bize bir liste d\u00f6nd\u00fcrecektir bu listenin 1. eleman\u0131 ise yine bir s\u0131n\u0131ft\u0131r.\r\n```"}}"
extensions[]
signatures
0.2060920bdaf1ef2124fe3471fd3d4fce2d1d8e052c61beb2ae1b410e17812fbf860309399ee33ed837a3692c3d841c747468d3f238f984c814cba583c1540f76d2
transaction_idcda0552a6e56ee51d4b91f7d435137eec8390203
block_num33,060,228
transaction_num24