Python checking __init__ parameter

2024/10/4 7:27:35

I've been trying to figuring this out for the last few hours, and I'm about to give up.

How do you make sure that in python only a matching specific criteria will create the object?

For example, let's say I want to create an object Hand, and initialize a Hand only when I have enough Fingers in the initializer? (Please just take this as an analogy)

Say,

class Hand:def __init__(self, fingers):# make sure len(fingers)==5, and #only thumb, index, middle, ring, pinky are allowed in fingerspass

Thanks.

These are the closest questions I found, but one is in C++, the other does not answer my question.

checking of constructor parameter

How to overload __init__ method based on argument type?

Answer

You have to define __new__ for that:

class Foo(object):def __new__(cls, arg):if arg > 10: #error!return None return super(Foo, cls).__new__(cls)print Foo(1)    # <__main__.Foo object at 0x10c903410>
print Foo(100)  # None

That said, using __init__ and raising an exception on invalid args is generally much better:

class Foo(object):def __init__(self, arg):if arg > 10: #error!raise ValueError("invalid argument!") # do stuff
https://en.xdnf.cn/q/70637.html

Related Q&A

Minidom getElementById not working

Minidoms getElementById function is returning None for any entry I pass to it.For example, this code:l = minidom.parseString(<node id="node">Node</node>) print(l.getElementById(&q…

Optimization on piecewise linear regression

I am trying to create a piecewise linear regression to minimize the MSE(minimum square errors) then using linear regression directly. The method should be using dynamic programming to calculate the dif…

Python: Check if list of named tuples contains particular attribute value

I have a list of named tuples:from collections import namedtupleT = namedtuple(T, [attr1, attr2, attr3, attr4]) t1 = T(T1, 1, 1234, XYZ) t2 = T(T2, 2, 1254, ABC) t3 = T(T2, 2, 1264, DEF) l = [t1, t2, t…

javascript error: arguments[0].scrollIntoView is not a function using selenium on python

Im using Selenium on python and I would like to scroll to an element to click on it. Everywhere I see that the rigth things to do to go directly to the element is to use :driver = webdriver.Chrome() dr…

Uploading a static project to google app engines

Disclaimer: I already asked here, but apparently off-topic. I want to set up a page using this bootstrap template and host it as a static website using the google appengine service. Inside the google_a…

Python cannot import DataFrame

I am trying to use Pandas in Python to import and manipulate some csv file.my code is like:import pandas as pd from pandas import dataframe data_df = pd.read_csv(highfrequency2.csv) print(data_df.col…

Sum of product of combinations in a list

What is the Pythonic way of summing the product of all combinations in a given list, such as:[1, 2, 3, 4] --> (1 * 2) + (1 * 3) + (1 * 4) + (2 * 3) + (2 * 4) + (3 * 4) = 35(For this example I have t…

discord.py: How to get the user who invited/added the bot to his server? [solution]

I want to send a DM to the user, who invited/added the bot to his server. I noticed that its displayed in the audit log. Can I fetch that and get the user or is there a easier way to achieve that? Ex…

How to reorder the keys of a dictionary?

I have multiple dictionaries inside the list. I want to sort the dictionary with the custom key. In my case, I want to sort it using Date key. By that, I mean to move the Date key to the first position…

How do bitwise operations work in Python?

I have been learning about Bitwise operations today and I learned that Not (~) inverses all bits, e.g.:01010 to 10101which means ~10 should be -5 but instead I have seen that it is -11 (per the python …