Найти - Пользователи
Полная версия: Помогите с классами
Начало » Python для новичков » Помогите с классами
1
Alex_Kutsan
Начал изучать классы
Вот создал первый класс по учебнику
>>> def f1(self,x,y):
return min(x,x+y)

>>> class C:
f = f1
def g(self):
return"I_LOVE_YOU"
h=g
вот стал пытатся его выполнять
C.h()
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
C.h()
TypeError: unbound method g() must be called with C instance as first argument (got nothing instead)
>>> C.f(5,7)
Traceback (most recent call last):
File "<pyshell#84>", line 1, in <module>
C.f(5,7)
TypeError: unbound method f1() must be called with C instance as first argument (got int instance instead)
В чём ошибка?
Rodegast
Я так понял вам нужно что то вроде этого:
class C:
def g(self):
return "I_LOVE_YOU"
def f1(self,x,y):
return min(x,x+y)
print C().g()
print C().f1(1,2)
Alex_Kutsan
тоесть для вызова метода моего класса нужно также вводить скобки после класса?
в книге об этом ни слова
Kogrom
Я не знаю зачем, и кому это нужно, но есть несколько способов так сделать, например:

def f1(self, x, y):
return min(x,x+y)

class C:

f = lambda self, x, y: f1(self, x, y)
h = lambda self: self.g()

def g(self):
return "your provocative string"

print C().f(1, 2)
print C().h()
regall
Alex_Kutsan
Скобки после класса - это собственно создание экземпляра класса.
print C().g()
по сути сокращенная запись для
c = C()
print c.g()
bw
Если нужно вызвать метод КЛАССа, а не метод ЭКЗЕМПЛЯРа:

class Baz:

@classmethod
def foo(cls):
print 'class -> %r'%cls

def bar(self):
print 'instance -> %r'%self
print 'class -> %r'%self.__class__
self, cls – просто имена переменных, традиционные, но можно использовать любые
classmethod – декоратор, делающий метод foo методом класса (первым аргументом передается класс, а не экземпляр, т.е. метод не привязывается к конкретному экземпляру и может вызываться непосредственно без создания экземпляра, ВНЕЗАПНО :-), это редко когда нужно
Baz – класс
Baz() – экземпляр класса
Baz() – другой экземпляр класса
Baz() – третий экземпляр класса :-)

Варианты использования:
Baz.foo()
Baz.bar() – ошибка
Baz().foo()
Baz().bar()

..bw
Alex_Kutsan
Так немного понятнее , огромное спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB