Discuss / Python / 实在不明白为什么死在这儿了

实在不明白为什么死在这儿了

Topic source

import json

class cdc(object): def init(self,name,age): self.name = name self.age = age

def cdc2dict(std):
    return {'name':std.name,
            'age':std.age}

s = cdc("哇哦",24)

#json.dumps(s, default = cdc2dict)

加粗放大这句错了,说是cdc2dict不认得,我懵逼了

蒲公英_020

#2 Created at ... [Delete] [Delete and Lock User]
>>> import json

>>> class cdc(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age


>>> def cdc2dict(std):
    return{'name':std.name,'age':std.age}

>>> s = cdc("hh",24)
>>> json.dumps(s,default = cdc2dict)
'{"name": "hh", "age": 24}'

没毛病,可能是某个小细节的问题。

你是把cdc2dict函数放在cdc类里面定义的么?如果是,拿出来定义就ok了

啊布trick

#4 Created at ... [Delete] [Delete and Lock User]
import json

class cdc(object):
    def __init__(self,name,age):
        self.name = name
        self.age  = age

def cdc2dict(std):
    return {'name':std.name,'age':std.age}
    s = cdc("哇哦",24)

s1 = json.dumps(s, default = cdc2dict,ensure_ascii=False)
print (s1)
没毛病老铁

额,如果是在类里面定义的,函数一定要添加self参数。。。

第四行init()

class Student(object):
  def __init__(self,name,age,score):
    self.name = name
    self.age = age
    self.score = score
  def student2dict(self,std):
    return {
      'name':std.name,
      'age':std.age,
      "score":std.score
    }
s = Student('Bob',20,88)
print(json.dumps(s,default = s.student2dict))

这样就可以了

有个题外话,有点儿 low,脸红的请教一下: s.student2dict 为什么没有传入参数呢(像这样s.student2dict(参数))?self.name 和 std.name 输出是一样的,但是能解释下区别么?

In [39]: class Student(object): ...: def init(self,name,age,score): ...: self.name = name ...: self.age = age ...: self.score = score ...: def student2dict(self,std): ...: print(std) ...: return { ...: 'name':self.name, ...: 'age':self.age, ...: "score":self.score ...: } ...: s = Student('Bob',20,88) ...: print(s) ...: print(s.student2dict) ...: print(json.dumps(s,default = s.student2dict)) 输出是这样的:

<__main__.Student object at 0x7ff9fcb40a90>

<bound method Student.student2dict of <__main__.Student object at 0x7ff9fcb40a90>>

<__main__.Student object at 0x7ff9fcb40a90> {"name": "Bob", "age": 20, "score": 88}

都交给我8

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

cdc2dict 函数定义的时候,参数应该传进去的是你新定义的class名字,而不是复制老师的std。

你这个init()是普通方法而不是构造方法啊。


  • 1
  • 2

Reply