Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2010 21:54:47

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с классами

Начал изучать классы
Вот создал первый класс по учебнику

>>> 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)
В чём ошибка?



Отредактировано (Июль 21, 2010 21:55:40)

Офлайн

#2 Июль 21, 2010 22:31:50

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Помогите с классами

Я так понял вам нужно что то вроде этого:

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)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано (Июль 21, 2010 22:36:14)

Офлайн

#3 Июль 21, 2010 22:58:59

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с классами

тоесть для вызова метода моего класса нужно также вводить скобки после класса?
в книге об этом ни слова



Офлайн

#4 Июль 21, 2010 23:05:54

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с классами

Я не знаю зачем, и кому это нужно, но есть несколько способов так сделать, например:

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()



Офлайн

#5 Июль 22, 2010 00:20:45

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Помогите с классами

Alex_Kutsan
Скобки после класса - это собственно создание экземпляра класса.

print C().g()
по сути сокращенная запись для
c = C()
print c.g()



Офлайн

#6 Июль 22, 2010 07:20:23

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Помогите с классами

Если нужно вызвать метод КЛАССа, а не метод ЭКЗЕМПЛЯРа:

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



Отредактировано (Июль 22, 2010 07:22:46)

Офлайн

#7 Июль 22, 2010 11:32:15

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с классами

Так немного понятнее , огромное спасибо



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version