我目前正在尝试在类中构建一个可以为我提供实例属性的方法。
这个想法是拥有一个实例属性的字典,它可以替换任何默认的类属性。
执行此操作的当前方法是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()
答案 0 :(得分:0)
在set @row = 0;
UPDATE philadelphia.msg_geo_sal SET id = @row := @row + 1;
printVars()
中返回字符串列表,这些列表是对象属性的名称。这些字符串将传递给dir(object)
。
inspect.ismethod()
检查其参数是否为实例方法。字符串对象不是实例方法,因此返回inspect.ismethod()
。这就是您的代码显示方法False
和printVars()
的原因。
我不知道你的代码想要实现的目标,但也许你可以这样做:
props()
或
inspect.getmembers(gpstest1, lambda x: not callable(x))
您还可以访问实例inspect.getmembers(gpstest1, lambda x: not inspect.ismethod(x))
以查看实例变量:
__dict__