Если бы Вы имеете длинный variablenames и закончили бы с:
UserHandler.GetUser.First.User.FirstName="Stefan"
UserHandler.GetUser.First.User.LastName="Karlsson"
UserHandler.GetUser.First.User.Age="39"
UserHandler.GetUser.First.User.Sex="Male"
UserHandler.GetUser.First.User.Occupation="Programmer"
UserHandler.GetUser.First.User.UserID="0"
....and so on
тогда я использовал бы СО сделать его более читаемым:
With UserHandler.GetUser.First.User
.FirstName="Stefan"
.LastName="Karlsson"
.Age="39"
.Sex="Male"
.Occupation="Programmer"
.UserID="0"
end with
В более позднем примере существует даже выигрыш в производительности по первому примеру, потому что в первом примере я выбираю пользователя каждый раз, когда я получаю доступ к свойству пользователя, и в СО СЛУЧАЕМ я только выбираю пользователя одно время.
я могу получить увеличение производительности, не используя с, как это:
dim myuser as user =UserHandler.GetUser.First.User
myuser.FirstName="Stefan"
myuser.LastName="Karlsson"
myuser.Age="39"
myuser.Sex="Male"
myuser.Occupation="Programmer"
myuser.UserID="0"
, Но я пошел бы для оператора WITH вместо этого, это выглядит более чистым.
И я просто взял это в качестве примера, так не жалуйтесь по классу со многими ключевыми словами, другой пример мог быть похожим: С RefundDialog. RefundDatagridView. SelectedRows (0)
You need to override __new__
, not __init__
:
class Foo(int):
def __new__(cls, some_argument=None, value=0):
i = int.__new__(cls, value)
i._some_argument = some_argument
return i
def print_some_argument(self):
print self._some_argument
Now your class work as expected:
>>> f = Foo(some_argument="I am a customized int", value=10)
>>> f
10
>>> f + 8
18
>>> f * 0.25
2.5
>>> f.print_some_argument()
I am a customized int
More information about overriding new
can be found in Unifying types and classes in Python 2.2.
В Python 2.4+ работает наследование от int:
class MyInt(int):pass
f=MyInt(3)
assert f + 5 == 8
Попробуйте использовать последнюю версию python. Ваш код работает в версии 2.6.1.