Discuss / Python / 问题请教

问题请教

Topic source

西城

#12 Created at ... [Delete] [Delete and Lock User]

你这修改后的代码不是通过类属性修改字典name,而是直接对字典的name修改。整段代码可以用 一行代码d[name]="Liu"来替代

d={'name':'sam','age':26,'gender':'male'}

class Object(object):                  # 4.把整个类删掉。修改类方法dict2bean为函数。执行这段代码
    def __init__(self,k,v):
        self.k = k
        self.v = v
    def dict2bean(self,k,v):           # 3.此处在方法中定义k,v参数和后面的d[k]=v 语句就相当于直接对字典进行操作。 
        for key,value in d.items():    # 2.这里的key和values完全没用到,循环没意义,删掉这一行对代码也没有任何影响
            if hasattr(self,"k"):      # 1.__init__中初始化的参数是一个变量,这里直接写死了,永远都是TRUE。删掉这一行代码不会对代码造成任何影响
                d[k]=v

myobj=Object('name','Liu')
myobj.dict2bean('name','Liu')   
print(d)




通过修改类属性修改字典。

d={'name':'sam','age':26,'gender':'male'}

class Object(object):
    def __init__(self,name):
        self.name = name
 
    def dict2bean(self,dic):
        for key in dic.keys():           # 1.此时key name,age,gender
            if hasattr(self,key):        # 2.判断对象中有没有name属性。__init__初始化了name属性,此处为true
                dic[key] = self.name     # 3.把self.name的值,即初始化的值传入到字典中。这样才是通过对属性赋值修改了字典d

myobj=Object('Liu')
myobj.dict2bean(d)
print(d)

没办法将一个变量指向的常量通过赋值的方法转换成变量。

# 把dict的key - value复制到obj,前提是obj有对应的property
def dict2bean(obj, d):
    for k, v in items(d):
        if hasattr(obj, k):
            setattr(obj, k, v) # 能写成obj.k = v吗?

这段代码看得很晕:      

这里的d是一个字典,但是obj和d有什么关系?为什么需要同时提供这两个形参?

难道,obj相当于类定义中的self?


  • 1
  • 2

Reply