Python获取实例属性的字典,但不获取方法

时间:2015-11-28 23:00:43

标签: python class methods attributes

我目前正在尝试在类中构建一个可以为我提供实例属性的方法。

这个想法是拥有一个实例属性的字典,它可以替换任何默认的类属性。

执行此操作的当前方法是def printVars(object),但我无法删除方法" props"和" printVars"即使使用检查或可赎回。

我假设方法和" __ xxxx __"根本不可调用,但在这种方法中,它们似乎是可调用的,所以这种方法不起作用。此外,检查没有检测到props或printVars都是方法。

我想要返回这个字典,所以我可以将它用作模块或其他类的输入信息。我不想从这里创建一个子类,因为变量需要用于电信中的不同概念,它们将用于许多概念,但是对于每个我计划定义一个新类或一个新模块,我可以使用新数据传递构造的词典。

以前的程序是在matlab中开发的。

有关如何从字典中删除方法的任何建议? 或者对我的方法采用更多Pythonic方法?

import datetime
import math
import os
import random
import urllib2
import inspect

class GPS_Parameters(object):
   area_km=40*1609.344
   area_coverage=math.pow(area_km,2)
   area_miles=40
   bandwidth_for_positioning=4.5e6 #Bandwidth for location data
   bandwidth_spectrum_allocation=4.995e6
   cluster_nodes=1
   cyclic_prefix_size=2*161+1
   delay_spread=20e-6
   frame_type = 1 #Location, information and synchronization   
   hyperbolic_vector_size=64
   init_method='locus' #Choices available are 'random' and 'locus'
   noise_value=0 #Explicit noise variance to create a range error
   number_iterations = 8 #Number of times we iterate in hyperbolic 
                     #solution solver_number_solutions
   number_segments=0
   number_simulations=35 #Returns with new noise statistics and a new 
                     #fading channel, should choose new targe location
   number_targets = 1 #targets to be located
   number_symbols=1
   sampling_frequency=7.68e6 #Sampling frequency of multicarrier modulation
                         #(subcarrier space 15e3) 
   segment_size=0
   simulation_mode=None #Modes: AWGN_Fading_Interference, AWGN_Fading, AWGN
   snr_db=25
   snir_db=25
   subcarrier_bw=15e3   

   def __init__(self, *args, **kwargs):
      self.number_sub_carriers=kwargs["number_sub_carriers"]
      self.reference_nodes=kwargs["reference_nodes"]
      self.rician_kdb=kwargs["rician_kdb"]
      self.simulation_mode=kwargs["simulation_mode"]
      self.snir_db=kwargs.get("snir_db")
      self.snr_db=kwargs.get("snr_db")
      self.total_cazac_bw=self.subcarrier_bw*self.number_sub_carriers

   def props(cls):
      return [i for i in cls.__dict__.keys() if i[:1] != '_']

   def printVars(object):
      for i in [v for v in dir(object) if v[:1] !='_']:
         if inspect.ismethod(i) !=True:
            print '\n%s:' % i
            exec('print object.%s\n\n') % i
            # Dictionary append should go here


if __name__ == "__main__":
   test1parameters={"simulation_mode":"AWGN", "snr_db":15,"rician_kdb":8,\
                "reference_nodes":7,"number_sub_carriers":128}
   gpstest1=GPS_Parameters(**test1parameters)
   gpstest1.printVars()

1 个答案:

答案 0 :(得分:0)

set @row = 0; UPDATE philadelphia.msg_geo_sal SET id = @row := @row + 1; printVars()中返回字符串列表,这些列表是对象属性的名称。这些字符串将传递给dir(object)

inspect.ismethod()检查其参数是否为实例方法。字符串对象不是实例方法,因此返回inspect.ismethod()。这就是您的代码显示方法FalseprintVars()的原因。

我不知道你的代码想要实现的目标,但也许你可以这样做:

props()

inspect.getmembers(gpstest1, lambda x: not callable(x))

您还可以访问实例inspect.getmembers(gpstest1, lambda x: not inspect.ismethod(x)) 以查看实例变量:

__dict__