Форум сайта python.su
0
Всем привет!
К сожалению не могу привести источник, но внем говорили о том что питон не поддерживает перегрузку методов и функции. Все потому что, хотелось вызвать метод, но с измененными параметрами, типа такой обертки сделать, и я всегда делал:
class A(object): def foo(self, string): print string class B(A): def Foo(self, string): string = "world" self.foo(string) B().Foo("hello")
class A(object): def foo(self, string): print string class B(A): def foo(self, string): string = "world" super(B, self).foo(string) B().foo("hello")
Отредактировано lobster (Март 11, 2014 17:32:39)
Офлайн
75
lobster
Я ничего не понял
Офлайн
33
lobster
К сожалению не могу привести источник, но внем говорили о том что питон не поддерживает перегрузку методов и функции.
Отредактировано Budulianin (Март 11, 2014 17:14:04)
Офлайн
43
Это переопределение метода, а не перегрузка.
Офлайн
0
SingularityСуть в том чтобы вызывать стандартные методы по тем же именам но немного измененные в механизме, удобно добавить какую-нибудь дополнительную проверку к стандартным методам или повесить исключение на че нибудь, чтобы это не отвлекало в клиентском коде.
lobster
Я ничего не понял
sergeekЯсно, спасибо. Вопрос снят.
Это переопределение метода, а не перегрузка.
Офлайн
253
Перегрузка это “имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются.”
В питоне не:
def a(int b): return b+2 def a(float b): return b+3
def a(int b): if(type(b) is int): return b+2 if(type(b) is float): return b+2
Офлайн
0
т.е. сам питон не будет вести поиск функции по типам аргументов.А ну, потому что динамические типы
TypeError: Error when calling the metaclass bases
cannot create 'builtin_function_or_method' instances
import pycurl import StringIO class CustomCurl(object): def __init__(self): self.response = StringIO.StringIO() self.curl = pycurl.Curl() self.setopt(pycurl.URL, "http://www.myip.ru/ru-RU/index.php") self.setopt(pycurl.WRITEFUNCTION, self.response.write) def perform(self): self.curl.perform() return self.response.getvalue() def __getattr__(self, name): return getattr(self.curl, name) ne = CustomCurl() print ne.perform()
Отредактировано lobster (Март 12, 2014 01:18:11)
Офлайн
857
doza_andтипами и/или количеством
Перегрузка это “имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются.”
#include <iostream>
using namespace std;
void func();
void func(int);
void func(int, int);
void func(int, double);
int main()
{
func();
func(1);
func(1, 1);
func(1, 1.0);
return 0;
}
void func()
{
cout << "func" << endl;
}
void func(int arg1)
{
cout << "func 1i" << endl;
}
void func(int arg1, int arg2)
{
cout << "func 1i 2i" << endl;
}
void func(int arg1, double arg2)
{
cout << "func 1i 2d" << endl;
}
[guest@localhost examples]$ .iso++ overload.cpp -o overload
[guest@localhost examples]$ ./overload
func
func 1i
func 1i 2i
func 1i 2d
[guest@localhost examples]$
Отредактировано py.user.next (Март 12, 2014 01:34:58)
Офлайн