简体   繁体   中英

How do I get python to read that () is 0?

I'm having issues trying to pass an empty parameter can someone explain to me why my code isn't working. I have a math test file that goes through my math library file but my lib file can't read the () code. When I run the code it says init () missing 1 required positional argument: 'y'

import MathLib as math
math test:
if __name__ == '__main__':
    math_obj1 = math.MyMathLib(2.0)
    math_obj2 = math.MyMathLib(-0.5)
    math_obj3 = math.MyMathLib() # this should give 0.0

    print("Math obj1 value = ",math_obj1.get_curr_value() )
    print("Math obj2 value = ",math_obj2.get_curr_value() )
    print("Math obj3 value = ",math_obj3.get_curr_value() )

import math
class MyMathLib:
    def __init__(self, y,):
        self.y = y
        if self == None:
            value == 0.0 

The self variable isn't actually a passable parameter in class methods (I recommend you take another look at python classes ). The first (and only) passable parameter in your init function is y . Since y has no default variable, you must pass a value for y , or give it a default value:

def __init__(self, y=0.0):
    self.y = y

Also I'm not sure what you're trying to achieve with this line, it makes no sense:

if self == None:
    value == 0.0 

value is only local to the init function, maybe you meant self.value ? Even then, self will never be None (unless you assign self = None within the method), so the statement will never trigger. Ontop of that, you've used a double == instead of = .

As posted, your definition of the __init__() function has y as a required argument.

If you want it to be optional and have a default value of zero, then write it this way:

class MyMathLib:
    def __init__(self, y=0.0):

That is because your __init__ requires two arguments instead of one. Instead of doing this, you can pass a default variable like @Jay Mody's answer. And also:

self == None will never be true because self always passes in a value y .

Here is another way you can do it:

class MyMathLib:
    def __init__(self):
        self.y = 0.0
    def passNumber(y):
        self.y = y

As you can see, if the number is passed using passNumber , that means that the number isn't 0.0 . This is another way to do it.

You have to set default value in __init__

def __init__(self, y=0.0):
    self.y = y

and then you don't have to check None

Or using None

def __init__(self, y=None): 
    self.y = y
    if self.y is None:
       self.y = 0.0 

It can be useful if you want to recognize if someone used MyMathLib() or MyMathLib(0.0)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM