Форум сайта python.su
Уважаемые коллеги! Столкнулся впервые с 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’
Спасибо всем откликнувшимся.
Офлайн
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)
Офлайн
# или через класс
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)
Офлайн
Dimka665!
Спасибо! Все заработало!
Может посоветуешь какую книжку почитать,
а то нашел только: Г. Россум, Ф. Дрейк, Д. Откидач “Язык программирования Python”
Мало примеров, тяжело разобраться.
Офлайн
http://natahaus.ifolder.ru/569028
Курс лекций Сузи - мне понравилось, да и поновее
Отредактировано (Окт. 30, 2008 12:36:11)
Офлайн
Офлайн
Спасибо всем за ссылки, обязательно прочитаю.
Уж, извините, не могу сходу осилить 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)
Офлайн
timasскачал, главы в содержании есть, а текста нет! Все что доступно=
http://natahaus.ifolder.ru/569028
Курс лекций Сузи - мне понравилось, да и поновее
Офлайн
Офлайн
n_stringМожно поискать на pipy, уверен там есть модули для определения констант, я обычно делаю так:
1. Я так понимаю в Python нет констант, тогда как объявить переменную только для чтения, без возможности переопределения
# 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
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)
Отредактировано (Окт. 30, 2008 14:03:31)
Офлайн