尝试在继承时增加变量 python
Trying to Increment a variable on its inheritance python
您好,我是 OOP 的新手 python,我目前正尝试在创建父 class 的实例时从子 Class 增加一个用户 ID 变量使用继承它似乎无法识别来自其父 class 的 Id 变量。这里的例子
class User:
_ID = 0
def __init__(self, name):
self.name = name
self.id = self._ID
self.__class__._ID += 1
class Customer(User):
def __init__(self, name):
def lastname(self):
return "self.name.split()[-1]"
如果我这样做,我可以访问 class 属性
>> Chris = User("Christopher Allan")
>> Chris.id
>> 0
当我尝试 运行
>> Andy = Customer('Andy Smith')
>> Andy.id
>> Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
Andy.id
AttributeError: 'Customer' object has no attribute 'id'
更新
我完成了客户 Class 的其余部分,这是代码对我不起作用的原因,对于我以前使用过的人来说很抱歉,至于问题的简短性,我没有测试它是否会使用传递给客户 class.
Customer
没有作为基础的 id
属性 class (User
) 从来没有调用过它的 __init__
方法,你也没有否则定义它。由于您正在覆盖基础 class' __init__
方法,因此您还需要调用 super
以便继承的代码也被调用:
class Customer(User):
def __init__(self, name):
super(Customer, self).__init__(name)
您的代码在 python-3.x and python-2.7 中对我都有效。相反,我建议错误在于第 3 行的缩进错误。
>>> class User:
... _ID = 0
... def __init__(self, name):
... self.name = name
... self.id = self._ID; self.__class__._ID += 1
...
>>> class Customer(User):
... pass
...
>>> Andy = Customer('Andy Smith')
>>> Andy.id
0
>>> import sys
>>> import sys
>>> sys.version
'2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]'
>>>
>>> class User:
... _ID = 0
... def __init__(self, name):
... self.name = name
... self.id = self._ID; self.__class__._ID += 1
...
>>> class Customer(User):
... pass
...
>>> Andy = Customer('Andy Smith')
>>> Andy.id
0
>>> import sys
>>> sys.version
'3.4.0b2 (v3.4.0b2:ba32913eb13e, Jan 5 2014, 11:02:52) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]'
>>>
您好,我是 OOP 的新手 python,我目前正尝试在创建父 class 的实例时从子 Class 增加一个用户 ID 变量使用继承它似乎无法识别来自其父 class 的 Id 变量。这里的例子
class User:
_ID = 0
def __init__(self, name):
self.name = name
self.id = self._ID
self.__class__._ID += 1
class Customer(User):
def __init__(self, name):
def lastname(self):
return "self.name.split()[-1]"
如果我这样做,我可以访问 class 属性
>> Chris = User("Christopher Allan")
>> Chris.id
>> 0
当我尝试 运行
>> Andy = Customer('Andy Smith')
>> Andy.id
>> Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
Andy.id
AttributeError: 'Customer' object has no attribute 'id'
更新
我完成了客户 Class 的其余部分,这是代码对我不起作用的原因,对于我以前使用过的人来说很抱歉,至于问题的简短性,我没有测试它是否会使用传递给客户 class.
Customer
没有作为基础的 id
属性 class (User
) 从来没有调用过它的 __init__
方法,你也没有否则定义它。由于您正在覆盖基础 class' __init__
方法,因此您还需要调用 super
以便继承的代码也被调用:
class Customer(User):
def __init__(self, name):
super(Customer, self).__init__(name)
您的代码在 python-3.x and python-2.7 中对我都有效。相反,我建议错误在于第 3 行的缩进错误。
>>> class User:
... _ID = 0
... def __init__(self, name):
... self.name = name
... self.id = self._ID; self.__class__._ID += 1
...
>>> class Customer(User):
... pass
...
>>> Andy = Customer('Andy Smith')
>>> Andy.id
0
>>> import sys
>>> import sys
>>> sys.version
'2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]'
>>>
>>> class User:
... _ID = 0
... def __init__(self, name):
... self.name = name
... self.id = self._ID; self.__class__._ID += 1
...
>>> class Customer(User):
... pass
...
>>> Andy = Customer('Andy Smith')
>>> Andy.id
0
>>> import sys
>>> sys.version
'3.4.0b2 (v3.4.0b2:ba32913eb13e, Jan 5 2014, 11:02:52) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]'
>>>