Найти - Пользователи
Полная версия: Передача параметра
Начало » Python для новичков » Передача параметра
1 2
n_string
Уважаемые коллеги! Столкнулся впервые с 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’

Спасибо всем откликнувшимся.
Dimka665
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)
Dimka665
# или через класс

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)
n_string
Dimka665!

Спасибо! Все заработало!
Может посоветуешь какую книжку почитать,
а то нашел только: Г. Россум, Ф. Дрейк, Д. Откидач “Язык программирования Python”
Мало примеров, тяжело разобраться.
timas
http://natahaus.ifolder.ru/569028
Курс лекций Сузи - мне понравилось, да и поновее
Cleric
выбирайте
n_string
Спасибо всем за ссылки, обязательно прочитаю.
Уж, извините, не могу сходу осилить 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>
Спасибо!
qman
timas
http://natahaus.ifolder.ru/569028
Курс лекций Сузи - мне понравилось, да и поновее
скачал, главы в содержании есть, а текста нет! Все что доступно=

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

P.S. может у кого читается? размер файла 477Кб…
Dimka665
Сузи:
http://www.intuit.ru/department/pl/python/1/
Cleric
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/

ЗЫ: на ваши вопросы с большей вероятностью ответят, если вы будете создавать отдельные топики для каждого
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