Python 传递的参数/变量为';不正确
在我的第二个类中使用继承练习OOP时,我在添加参数时遇到了问题,正如您所看到的:Python 传递的参数/变量为';不正确,python,oop,inheritance,chemistry,Python,Oop,Inheritance,Chemistry,在我的第二个类中使用继承练习OOP时,我在添加参数时遇到了问题,正如您所看到的:(self、name、tred、PM、PM2、ra、ra2)。但是,当运行程序时,它告诉我不能乘法Nonetype,我打印它们以查看有什么问题,我得到一些参数不正确 第一个类工作得很好(Atomic\u d),我只需要了解它是如何工作的,第二个类中的变量:Molecular\u d 我怎样才能解决这个问题 我打印每个变量,看看问题出在哪里 print("Hi I'm name",sel
(self、name、tred、PM、PM2、ra、ra2)
。但是,当运行程序时,它告诉我不能乘法Nonetype
,我打印它们以查看有什么问题,我得到一些参数不正确
第一个类工作得很好(Atomic\u d
),我只需要了解它是如何工作的,第二个类中的变量:Molecular\u d
我怎样才能解决这个问题
我打印每个变量,看看问题出在哪里
print("Hi I'm name",self.name)
print("Hi I'm ra",self.ra)
print("Hi I'm ra2",self.ra2)
print("Hi I'm PM",self.PM)
print("Hi I'm PM2",self.PM2)
Hi I'm name Ox de magnesio
Hi I'm ra None
Hi I'm ra2 0.14
Hi I'm PM 16.0
Hi I'm PM2 0.072
回溯:
TypeError回溯(最近一次调用)
在里面
1镁氧=分子氧(“脱镁氧”,“氯化钠”,24.31,16.0,0.072,0.14)
2.
---->3镁氧密度()
密度(自我)
52
53如果nred==8:
--->54 l=圆形((2*self.ra)*(2*self.ra2)),3)
55卷=l**3
56
TypeError:不支持*:“int”和“NoneType”的操作数类型
调用super()_init()时,省略了红色
参数。Python假定您传递的三个参数是name
、red
和pa
,尽管这似乎不是您想要的
当您没有将parameter=附加到参数时,Python假定您是从左到右提供它们。你需要写:
super().__init__(name=name, PM=PM, ra=ra)
调用super()_init()时,省略
red
参数。Python假定您传递的三个参数是name
、red
和pa
,尽管这似乎不是您想要的
当您没有将parameter=附加到参数时,Python假定您是从左到右提供它们。你需要写:
super().__init__(name=name, PM=PM, ra=ra)
如果不打算将关键字参数与类的顺序相同,则需要使用关键字参数。尝试将
Molecular\u d
更改为以下内容:
class Molecular_d(Atomic_d):
def __init__(self,name="",tred="",PM=None,ra=None,PM2=None,ra2=None):
super().__init__(name=name,PM=PM,ra=ra)
self.PM2 = PM2
self.ra2 = ra2
self.tred = tred
def density(self):
tredes = {"NACL":8}
self.tred = self.tred.upper()
nred = tredes.get(self.tred)
nav = round(6.022*(10**23),3)
if nred == 8:
l = round(((2*self.ra)*(2*self.ra2)),3)
vol = l**3
else:
vol = 10
density = ((8*(self.PM + self.PM2))/(nav*vol))
return "{}: {} g/cc".format(self.name,density)
mag = Molecular_d(name="a", tred="as", PM=1.1, ra=0.2, PM2=2.3, ra2=40.1)
result = mag.density()
print(result)
<< 'a: 4.5167718365991366e-24 g/cc'
分子级(原子级):
def uuu init uuuuu(self,name=,tred=,PM=None,ra=None,PM2=None,ra2=None):
super()。\uuuuu init\uuuuuu(name=name,PM=PM,ra=ra)
self.PM2=PM2
self.ra2=ra2
self.tred=tred
def密度(自身):
tredes={“NACL”:8}
self.tred=self.tred.upper()
nred=tredes.get(self.tred)
导航=圆形(6.022*(10**23),3)
如果nred==8:
l=圆形(((2*self.ra)*(2*self.ra2)),3)
体积=l**3
其他:
体积=10
密度=((8*(self.PM+self.PM2))/(nav*vol))
返回“{}:{}g/cc.format(self.name,density)
mag=Molecular_d(name=“a”,tred=“as”,PM=1.1,ra=0.2,PM2=2.3,ra2=40.1)
结果=磁密度()
打印(结果)
如果不打算将关键字参数与类的顺序相同,则需要使用关键字参数。尝试将Molecular\u d
更改为以下内容:
class Molecular_d(Atomic_d):
def __init__(self,name="",tred="",PM=None,ra=None,PM2=None,ra2=None):
super().__init__(name=name,PM=PM,ra=ra)
self.PM2 = PM2
self.ra2 = ra2
self.tred = tred
def density(self):
tredes = {"NACL":8}
self.tred = self.tred.upper()
nred = tredes.get(self.tred)
nav = round(6.022*(10**23),3)
if nred == 8:
l = round(((2*self.ra)*(2*self.ra2)),3)
vol = l**3
else:
vol = 10
density = ((8*(self.PM + self.PM2))/(nav*vol))
return "{}: {} g/cc".format(self.name,density)
mag = Molecular_d(name="a", tred="as", PM=1.1, ra=0.2, PM2=2.3, ra2=40.1)
result = mag.density()
print(result)
<< 'a: 4.5167718365991366e-24 g/cc'
分子级(原子级):
def uuu init uuuuu(self,name=,tred=,PM=None,ra=None,PM2=None,ra2=None):
super()。\uuuuu init\uuuuuu(name=name,PM=PM,ra=ra)
self.PM2=PM2
self.ra2=ra2
self.tred=tred
def密度(自身):
tredes={“NACL”:8}
self.tred=self.tred.upper()
nred=tredes.get(self.tred)
导航=圆形(6.022*(10**23),3)
如果nred==8:
l=圆形(((2*self.ra)*(2*self.ra2)),3)
体积=l**3
其他:
体积=10
密度=((8*(self.PM+self.PM2))/(nav*vol))
返回“{}:{}g/cc.format(self.name,density)
mag=Molecular_d(name=“a”,tred=“as”,PM=1.1,ra=0.2,PM2=2.3,ra2=40.1)
结果=磁密度()
打印(结果)
你有:
class-Atomic_d():
def uuu init uuuu(self,name=“”,red=“”,PM=None,ra=None):
但是,初始化是:
分子级(原子级):
def uuu init uuuuu(self,name=,tred=,PM=None,ra=None,PM2=None,ra2=None):
super().\uuuuu init\uuuuuuu(名称、PM、ra)
它:
转到:
def __init__(self,name="",red="",PM=None,ra=None):
作为
因此,ra
参数没有初始化。您有:
class-Atomic_d():
def uuu init uuuu(self,name=“”,red=“”,PM=None,ra=None):
但是,初始化是:
分子级(原子级):
def uuu init uuuuu(self,name=,tred=,PM=None,ra=None,PM2=None,ra2=None):
super().\uuuuu init\uuuuuuu(名称、PM、ra)
它:
转到:
def __init__(self,name="",red="",PM=None,ra=None):
作为
因此,ra
参数没有初始化。在super()。\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(名称,PM,ra)
中,您没有通过红色,这意味着末尾的ra<。在这种情况下,将=None
设为默认值没有多大意义,因为如果丢失任何数据,则对象是“无效”的。如果没有默认设置,您将得到一个错误。在super()。\uuuu init\uuuuu(name,PM,ra)
中,您没有通过红色
,这意味着最后的ra
没有被填充。在这种情况下,将=None
设为默认值没有多大意义,因为如果丢失任何数据,则对象是“无效”的。如果没有默认值,您将得到一个错误。