这是我的第一次,我是Python新手。 我试图创建一个程序,收集.NETFramework版本的信息,然后将其与变量D460805的值进行比较,该变量是此类的一个对象
以下是采取的步骤:
创建类DotNetVersion,它可以将我在代码末尾定义的变量d
的值与在我的PC上计算为460805的值a.getdotnetinfo(subkeyname)进行比较
创建类look\u get\u DotNet\u version,该类将获取计算机,然后定义获取SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client
注册表值的函数并返回要打印的值
import json
import os
import sys
try:
from winreg import*
except:
print ("Unable to import _winreg module! Please Check your python installation.")
exit(-1)
class DotNetVersion(object):
def __init__(self,release):
self.release = release
def __eq__(self, other):
if not isinstance(other, a.getdotnetinfo(subkeyname)):
print("not an instance")
return NotImplemented
else:
print("it is an instance")
def __str__(self):
return f'{self.release}'
class look_get_DotNet_version(object):
def __init__(self,machine):
try:
if machine == None:
self.lm_hive = OpenKey(HKEY_LOCAL_MACHINE, '')
else:
self.lm_hive = ConnectRegistry(machine, HKEY_LOCAL_MACHINE)
except WindowsError as e:
print (e)
exit(-2)
def getdotnetinfo(self, subkeyname):
output = None
try:
if subkeyname:
subkey = OpenKey(self.lm_hive, subkeyname)
release = QueryValueEx(subkey, 'Release')[0]
output = DotNetVersion(release)
except Exception as e:
print (e)
pass
return output
我创建一个变量subkeyname
:
subkeyname = r'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client'
将机器设置为无:
machine = None
创建a
如下,将self.lm_hive
设置为OpenKey(HKEY_LOCAL_MACHINE, '')
:
a = look_get_DotNet_version(machine)
创建值为460805的字符串:
d="460805"
创建d作为类DotNetVersion的实例:
d = DotNetVersion(d)
创建b以输出版本的值:
b = a.getdotnetinfo(subkeyname)
print(b)
将值为460805的b与值为460805的d进行比较:
print(look_get_DotNet_version.__eq__(b,d))
460805
NotImplemented
我被困在这一点上,__eq__
,从下面的代码片段来看,应该说它是一个实例,因为other
即d等于a.getdotnetinfo(subkeyname)
def __eq__(self, other):
if not isinstance(other, a.getdotnetinfo(subkeyname)):
print("not an instance")
return NotImplemented
else:
print("it is an instance")
或者,如果你能帮助我指导我如何比较这种情况下的版本
这个程序的长期设想是,如果它不匹配,就下载.NETFramework 4.7并安装到机器上
非常感谢您的帮助,如果您需要任何澄清,请告诉我
我知道格式看起来很糟糕,但我会努力的
通过创建一个类来包装版本字符串,您将使这一过程变得非常复杂。您可以很容易地直接从
getdotnetinfo()
返回版本字符串并直接进行比较:然后使用它:
如果您坚持创建一个自定义类并重写
__eq__()
,那么首先需要清楚地定义相等的含义。在本例中,如果两个实例具有相同的release
属性,我认为您希望它们相等:没必要想得太多
确保使用
==
运算符。千万不要直接打电话给__eq__()
:相关问题 更多 >
编程相关推荐