2016-04-13 15 views
0

Python ile varlıklarla uğraşmak istiyorum. Her varlığın çeşitli Öznitelik Değeri çiftleri ve çeşitli türleri vardır. Örneğin, bir varlık olarak "iPhone", o kadar AV çifti bulunuyor:Python'da bir varlık için iyi bir veri yapısı nasıl tanımlanır?

Developer, Apple Inc 
CPU, Samsung 
Manufacturer, Foxconn 

ve o kadar türü vardır:

smartphone 
mobilephone 
telephone 

ben varlık için class tanımlamak istiyoruz. Ancak, 2 boyutlu vektör, attribute-value pair ve type bilgilerinin saklanması gerekiyor. Ancak aşağıdaki kod çalışmıyor. Peki bu tür bir varlık için iyi bir veri yapısını nasıl tanımlayabilirim (belki class olmadan)?

class entity: 
def __init__(self, type, av[]): 
    self.type=type 
    self.av[]=av[] 
+0

kullanın [namedtuple] (https://docs.python.org/3/library/collections.html#collections.namedtuple) kendisini yazan bir sınıf olan. – msw

cevap

3

Kodunuzdaki bir sözdizimi hatası var - Sınıfına yerde [] gerekmez.

class Entity: 

    def __init__(self, types, attributes): 
     self.types = types 
     self.attributes = attributes 

iphone = Entity(
    types=['smartphone', 'mobilephone', 'telephone'], 
    attributes={ 
     'Developer': ['Apple Inc'], 
     'CPU': ['Samsung'], 
     'Manufacturer': ['Foxconn', 'Pegatron'], 
    }, 
) 
+0

, u türü için '* args' – qvpham

+0

@matino kullanabilir, cevabınız için teşekkürler. Başka bir sorum var, ben öznitelikleri için 'dict' kullanıyorum. Ancak, 'iphone',' Üretici, Foxconn' ve 'Üretici, Pegatron' gibi 2'den fazla özniteliğe sahipse, ben' dict [attribute] = value' kullanıyorum, yalnızca bir öğe alabilirim. – flyingmouse

+0

Değerler için 'list'ü kullanabilir ve istediğiniz kadar var. Örneğimi değiştirdim. – matino

2

Kişisel girinti berbat: Aşağıda

özelliklerdeki için tür bilgileri için list ve dict kullanabilirsiniz örneğidir Ayrıca

class entity: 
    def __init__(self, type, av[]): 
     self.type=type 
    self.av[]=av[] 

; İdeal olarak bir sınıf Entity ve onu devralan bir alt sınıf IPhone oluşturmanız gerekir. Her öznitelik bir sınıf özniteliği olmalı ve yalnızca bir liste/dict içindeki bir değer olmalıdır. Böyle bir şey:

class Entity(object): 
    def __init__(self, type): 
     self.type = type 
    ... attributes and methods common to all entities 

class IPhone(Entity): 
    def __init__(self, developer, cpu, manufacturer): 
     Entity.__init__(self, "smartphone") 
     self.developer = developer 
     self.cpu = cpu 
     self.manufacturer = manufacturer