循环字符串以在类构造函数中创建属性 - python

时间:2018-01-05 21:08:42

标签: python python-3.x attributes

我已经坚持了一段时间。一旦构造,我无法访问对象属性的值,但是控制台打印名称就好了。属性的名称和数量需要是动态的,并根据它们的来源而变化。因此,我不能只使用一致的方式。

starting_list = ["Comapny", "Contact Name", "Email", "Phone", "URL", "Country", "Source"]

class NewClass(object):
    _myattrib = None

    def __setattr__(self, prop, val):
        super().__setattr__('myattrib', val)
        print("setting myattrib")

    def __init__(self):
        for item in starting_list:
            #cleaning up a bit
            item = str(item)
            item = item.lower()
            item = item.strip()
            item = item.replace(' ', '_')
            self.__setattr__(self, item, 'hi')
            print(item) #it reads it here

print(NewClass.url)

任何帮助都会得到赞赏。

1 个答案:

答案 0 :(得分:1)

我会更新对象__dict__属性,而不是弄乱__setattr__

class NewClass:
  def __init__(self, items=(), default='hi'):
    sanitized = (str(item).lower().strip().replace(' ', '_') for item in items)
    self.__dict__.update({item: default for item in sanitized})

starting_list = ["Comapny", "Contact Name", "Email", "Phone", "URL", "Country", "Source"]

nc = NewClass(starting_list)

print(nc.email) # prints hi

编辑:为了便于阅读,将一些行拆分