python能不能new对象的同时给成员变量赋值

例如C#这样

info = new MyClass(){
    name:"小明",
    age:13
}
阅读 2.5k
3 个回答

python3中可以这样

class MyClass(object):
    __slots__ = ('name', 'age') # 你的属性
    def __init__(self, d):
        for i in self.__slots__:
            setattr(self, i, d[i] if i in d else None)
            
    def to_dict(self):    # 后面的方法为了显示更方便
        return {i: getattr(self, i) for i in self.__slots__}
        
    def __str__(self):
        return str(self.to_dict())
        
    def __repr__(self):
        return str(self.to_dict())

# 测试
info = MyClass({
    'name':'小明',
    'age':13
})
print(info)    # {'age': 13, 'name': '小明'}

info1 = MyClass({
    'name':'小明'
})

print(info1)    # {'age': None, 'name': '小明'}
         
  1. python 没有 new
  2. python 只有 call ,括号 () 就是调用了相关 __call__ 方法。
  3. python 中“实例化”只是一个普通的 call (它返回了相关对象) ,里面附加了 __init__ 的过程而已。
  4. 赋值什么的你自己在 __init__ 中作不就完了。
>>> class MyClass(object):
        def __init__(self, name, age, **kwargs):
            self.name = name
            self.age = age
            self.kv = kwargs

        def more(self):
            for k in self.kv:
                print(k, self.kv[k])

            
>>> info = MyClass(name="xiaoming", age=13, score=100, weight=40)
>>> info.name
'xiaoming'
>>> info.age
13
>>> info.more()
('score', 100)
('weight', 40)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题