Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 30, 2008 11:46:24

n_string
От:
Зарегистрирован: 2008-10-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

Уважаемые коллеги! Столкнулся впервые с Python. Не могу разобраться как в Python передавать параметр. Поправьте мой код.
Что делаю неправильно, пример:

Module_A:
#требуется провести проверку

from Module_B import B
b = B(5)
assert(b.fnc(10, 4) == 10 * 4 * 5)
*******************************

Module_B:
# делаю так, но Module_A “не видит” b.fnc

def B(n):
return n
def fnc(w, v):
j = w * v * n
return j
*******************************

Ошибка: AttributeError: ‘int’ object has no attribute ‘fnc’

Спасибо всем откликнувшимся.



Офлайн

#2 Окт. 30, 2008 11:49:37

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

def B(n):
def fnc(w, v):
j = w * v * n
return j
return fnc

# ====================

from Module_B import B
b = B(5)
# и вместо assert(b.fnc(10, 4) == 10 * 4 * 5)
assert(b(10, 4) == 10 * 4 * 5)



Отредактировано (Окт. 30, 2008 11:57:11)

Офлайн

#3 Окт. 30, 2008 11:56:35

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

# или через класс

class B:
def __init__(self, n):
self.n = n

def fnc(self, w, v):
j = w * v * self.n
return j

b=B(5)
b.fnc(10,4)



Офлайн

#4 Окт. 30, 2008 12:16:40

n_string
От:
Зарегистрирован: 2008-10-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

Dimka665!

Спасибо! Все заработало!
Может посоветуешь какую книжку почитать,
а то нашел только: Г. Россум, Ф. Дрейк, Д. Откидач “Язык программирования Python”
Мало примеров, тяжело разобраться.



Офлайн

#5 Окт. 30, 2008 12:32:56

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

http://natahaus.ifolder.ru/569028
Курс лекций Сузи - мне понравилось, да и поновее



Отредактировано (Окт. 30, 2008 12:36:11)

Офлайн

#6 Окт. 30, 2008 12:36:08

Cleric
От:
Зарегистрирован: 2007-06-26
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

Офлайн

#7 Окт. 30, 2008 13:04:16

n_string
От:
Зарегистрирован: 2008-10-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

Спасибо всем за ссылки, обязательно прочитаю.
Уж, извините, не могу сходу осилить Python
Если можно, еще пару вопросов:

1. Я так понимаю в Python нет констант, тогда как объявить переменную только для чтения,
без возможности переопределения, например:

class Arguments:
isArg = 1;
#как объявить isArg только для чтения?

2. Правильно ли я делаю наследование:
#Объявляю:
class Child(Parent):
def isChild©:
c = 1
return c
#Вызываю:
Child.isChild(self, ch):
ch = 0
return ch
#ch должна вернуть 0!
#Почему-то жалуется на Child.isChild(self, ch)<bold>:</bold>
Спасибо!



Отредактировано (Окт. 30, 2008 13:07:14)

Офлайн

#8 Окт. 30, 2008 13:24:59

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

timas
http://natahaus.ifolder.ru/569028
Курс лекций Сузи - мне понравилось, да и поновее
скачал, главы в содержании есть, а текста нет! Все что доступно=

Невозможно отобразить страницу
Эта страница сейчас недоступна. Возможно, это вызвано техническими проблемами на веб-узле, или требуется изменение параметров обозревателя.

P.S. может у кого читается? размер файла 477Кб…



Офлайн

#9 Окт. 30, 2008 13:39:41

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

Офлайн

#10 Окт. 30, 2008 13:53:37

Cleric
От:
Зарегистрирован: 2007-06-26
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметра

n_string
1. Я так понимаю в Python нет констант, тогда как объявить переменную только для чтения, без возможности переопределения
Можно поискать на pipy, уверен там есть модули для определения констант, я обычно делаю так:
# elements.py
import sys
from user_modules.util import ConstScope

namespace = ConstScope()

namespace.nothing = 0
namespace.fire = 1
namespace.ice = 2
namespace.earth = 3
namespace.poison = 4
namespace.thunder = 5
namespace.wind = 6
namespace.water = 7
namespace.holy = 8
namespace.names = ('Nothing', 'Fire', 'Ice', 'Earth',
'Poison', 'Thunder', 'Wind', 'Water', 'Holy')

sys.modules[__name__] = namespace
и юзаю так:
>>> import elements
>>> elements.holy
8
>>> elements.holy = 10

Traceback (most recent call last):
File "D:\usr\dev\python\src\projects\TripleTriad\p.py", line 4, in <module>
elements.holy = 10
File "D:\usr\dev\python\import\user_modules\util.py", line 18, in __setattr__
self.__class__.__name__))
ConstError: Can't rebind name 'holy' in ConstScope instance
в user_modules.util
кроме прочего есть два класса(рецепт из cookbook'a):
class Immutable(object):
'''
Mixin-класс предназначен для определения классов без возможности
изменения атрибутов'''

def __setattr__(self, name, value):
if name in self.__dict__:
raise ConstError("Can't rebind name '%s' in %s instance" % (name,
self.__class__.__name__))

self.__dict__[name] = value

def __delattr__(self, name):
if name in self.__dict__:
raise ConstError("Can't unbind name '%s' in %s instance" % (name,
self.__class__.__name__))

raise AttributeError("'%s' object has no attribute '%s'" % (
self.__class__.__name__, name))

class ConstScope(Immutable):
'''
Класс реализует пространство имен с неизменяемыми атрибутами'''

def __init__(self, **kwargs):
if kwargs:
self.__dict__.update(kwargs)
также можно воспользоватся namedtuple http://code.activestate.com/recipes/500261/

ЗЫ: на ваши вопросы с большей вероятностью ответят, если вы будете создавать отдельные топики для каждого



Отредактировано (Окт. 30, 2008 14:03:31)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version