永不秃头的ssf 2019-01-19 09:37 采纳率: 0%
浏览 414
已采纳

关于类中遍历属性的一个问题(新手,这个问题困扰我很久,希望由一个比较耐心地大神解决问题

class Medicines(Object):
medicines=[]
def addmedicine(self,medicine):
self.medicines.append(medicine)
def remmedicine(self,medicine):
self.medicines.remove(medicine)
def visit(self,visitor):
for m in self.medicines:

m.accept(visitor)
这个呢是一个类似访问者模式地,我会给这个类的列表加入了两个对象,这两个对象里面都有accept方法,其实我就是想通过循环列表,让这两个对象调用自己的accept方法,但是最终结果只有一个,是列表的最后一个元素。
为什么会这样呢?是什么原因?如何解决?
同时我又尝试了一个之前试过的方法,

self.__dict__[m].accept。
这个方法之前成功过,但当时的操作只是读取列表里面对象的值,而不是调用里面对象的方法,在这里却出现了keyerror这个错误。
为什么会这样?是什么原因?

希望有大神能够帮我解决这个问题

  • 写回答

2条回答

  • weixin_44596846 2019-01-21 16:57
    关注
        这段代码是可以把类内部的set方法和get方法全部打印出来,你可以试试
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for(PropertyDescriptor p:propertyDescriptors) {
                //获得读写方法 
                System.out.println(p.getName());  
                System.out.println(p.getReadMethod().getName());//读  
                System.out.println(p.getWriteMethod().getName());//写
    
                Method writeMethod = p.getWriteMethod();
                //给该类赋值
                writeMethod.invoke(object, Map.containsKey(p.getName())?Map.get(p.getName()).toString():"");
    
            }
    
    
        } catch (Exception e) {
            log.error("生成类异常["+e+"]");
            return "上送数据异常,请确定上送数据是否填写完整";
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况