Pros and cons of #staticmethod [closed] - python

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
If I have some (and only one) class, A, in my file with some basic method,
class A(B):
def some_overrided_method()
return {'output': True}
what of the following would be better to use?
Static method inside class
class A(B):
def some_overrided_method(self)
return {'output': self.do_smth()}
#staticmethod
def do_smth(self):
return True
Function outside class
def do_smth():
return True
class A(B):
def some_overrided_method(self)
return {'output': do_smth()}
Of just some nested method inside
class A(B):
def some_overrided_method(self)
def do_smth():
return True
return {'output': do_smth()}

If it doesn't do anything with the class/instance, there is no point in it being a method of the class.
Just use a normal function.
A staticmethod is very rarely useful.
The only reason I can think of for using a staticmethod is if the function makes no sense to use outside of the class.

Related

Calling ancestor function [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 3 years ago.
Improve this question
I call ancestor init function but this doesn't call ancestor function set_param(), it calls descadent function.It means in my script, that fathers variable self.a isn't initialized. Can you explain it to me? Thank You.
class father (object):
def __init__(self):
self.set_param()
def set_param(self):
self.a = 'father' # isn't initialized
class son (father):
def __init__(self):
father.__init__(self)
self.set_param()
def set_param(self):
self.b = 'son'
person = son()
self.set_param() gets called twice, from son.__init__ and from father.__init__, but both times it calls son.set_param because type(self) is son in both cases. father.set_param is never called.

Make a class that does nothing [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 4 years ago.
Improve this question
I want a class that is just a complete door mat. If I call any method with any args, or any other attribute, it should just do nothing.
That is, given a class called Gobble:
gbl=Gobble()
gbl.foo.bar().asdf
should be fine.
A simple solution is
class Gobble(object):
def __getattr__(self, item):
return self
def __call__(self, *args, **kwargs):
return self
__getattr__ for property access, and __call__ for method call
You can use unittest.mock.MagicMock:
from unittest.mock import MagicMock
gbl=MagicMock()
gbl.foo.bar().asdf[1]

calling __init__ method in composition [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 6 years ago.
Improve this question
I am trying to use composition in python but I wasn’t sure how to do it if I needed the __init__ method from the other class. In other words, how do I do this super(childClass, self).__init__(…) with composition?
for example:
class Class*(object):
….
class ClassA(Class*):
def __init__(self, lst, ...):
super(ClassA, self).__init__(...)
def meth1()
def meth2()
class ClassB(Class*):
def __init__(self, name, lst=None, other=None)
**here I want to use the __init__ method from ClassA**
self.a = ClassA(..)
def meth1():
return self.a.meth1()
I hope this is clear. Thanks!
In a composition, your ClassB simply has a member that happens to be a ClassA, so, you don't invoke ClassA's __init__ method directly, you just instantiate it if you need to.
class ClassB(Class*):
def __init__(self, name, lst=None, other=None):
self.my_A = ClassA(lst, ...)

Differences between `class` and `def` [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
What is the main difference between class and def in python? Can a class in python interact with django UI (buttons)?
class is used to define a class (a template from which you can instantiate objects).
def is used to define a function or a method. A method is like a function that belongs to a class.
# function
def double(x):
return x * 2
# class
class MyClass(object):
# method
def myMethod(self):
print ("Hello, World")
myObject = MyClass()
myObject.myMethod() # will print "Hello, World"
print(double(5)) # will print 10
No idea about the Django part of your question sorry. Perhaps it should be a separate question?
class defines a class.
def defines a function.
class Foo:
def Bar(self):
pass
def Baz():
pass
f = Foo() # Making an instance of a class.
f.Bar() # Calling a method (function) of that class.
Baz() # calling a free function

Python: how to maintain independence from instance? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
I'm refactoring a program of mine. Basically I move all classes into a module.
Now I'm facing the problem that some of the module code is dependent on instances of a class I instantiated in my main program. Of course I could pass the instance to the method directly. Or pickle the instance. Or define the attribute as global. Which is the best way to go?
One possibility might be to pass the instance to the class upon instantiation:
class Bar(object):
def __init__(self, inst):
self.inst = inst
def method(self):
# use self.inst
inst = Foo()
bar = Bar(inst)

Categories