Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 传递的参数/变量为';不正确_Python_Oop_Inheritance_Chemistry - Fatal编程技术网

Python 传递的参数/变量为';不正确

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

在我的第二个类中使用继承练习OOP时,我在添加参数时遇到了问题,正如您所看到的:
(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
设为默认值没有多大意义,因为如果丢失任何数据,则对象是“无效”的。如果没有默认值,您将得到一个错误。